Programming/자바(Java) 55

Java8에는 어떤것들이 바뀌었나?

Java8이 출시하고 많은 변화를 겪었다고 하여 Java8을 기준으로 전 후를 알아보고 싶었다.Lambda expression(람다 표현식)Functional interface(함수형 인터페이스)Default method(디폴트 메서드)Stream(스트림)Optional(옵셔널)새롭게 추가된 날짜 APICompletableFuture(컴플리터블 퓨처)JVM의 변화 1. lambda 표현식Java8때 출시한 lambda 표현식에 대해서 먼저 알아봤다.lambda가 탄생하게된 목적이 무엇일까? lambda 표현식이란 하나의 메소드를 하나의 식으로 표현한것이다.처음엔 저 한 문장이 이해가 안갔다. Java8이전에 있었던 '익명함수'라는 놈을 살펴보면 익명함수란 함수에 이름을 붙이이 않고 바로 정의해서 사용하는..

자바에서 가장 많이 호출되는것은 무엇일까

자바에서 가장 많이 호출되는 클래스는 사용자의 코드와 환경에 따라 다를 수 있지만, 일반적으로 핵심 Java API 클래스들이 가장 많이 호출됨. 그중에서도 아래 클래스들이 자주 호출됨: 1. java.lang 패키지이 패키지의 클래스는 기본적으로 import 없이 사용되므로 매우 자주 호출됨. • String:• 문자열 처리와 관련된 작업에 사용. • 예: System.out.println("Hello");에서 문자열 리터럴 "Hello"가 포함됨. • Object: • 모든 클래스의 최상위 부모 클래스. • 객체 생성, 비교, 해시코드 계산 등에서 자주 호출됨. • 예: equals, hashCode, toString 메서드. • Math: • 수학적 계산(예: Math.sqrt, Math.pow)에..

13-3 쓰레드의 구현과 실행

1. Thread클래스를 상속class MyThread extends Thread { public void run() { // Thread클래스의 run()을 오버라이딩 /* 작업내용 */ }} 2. Runnable인터페이스를 구현 - 더 유연함class MyThread2 implements Runnable { public void run() { // Runnable인터페이스의 추상메서드 run()을 구현 /* 작업내용 */ }} 쓰레드의 실행- 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.*start()는 실행가능한 상태가 되는것이지 반드시 실행하는것은 아니다. 언제 실행될지는 OS의 스케줄러가 결정한다. (start 했다고 즉시 실행되..

13-1 프로세스와 쓰레드

프로세스: 실행 중인 프로그램, 자원(resources - 메모리, CPU)과 쓰레드로 구성쓰레드: 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다.프로세스: 쓰레드  = 공장 : 일꾼싱글 쓰레드 프로세스 = 자원 + 쓰레드멀티 쓰레드 프로세스 = 자원  + 쓰레드 + 쓰레드 + 쓰레드.... + 쓰레드 프로세스와 쓰레드(process & thread)하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.  프로세스는 독립적인 실행 단위로, 각자의 메모리 공간을 가진다. 프로세스 간 통신은 복잡하며, 생성 및 관리 비용이 크다.쓰레드는 프로세스 내의 경량 실행 단위로, 메모리 공간을 공유하며, 생성과 관리 비용이 적다...

12-23 애너테이션이란?

- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공한다.  애너테이션의 사용 예Junit이라는 단위테스트 프로그램을 위한 애너테이션 @Test 표준 애너테이션- 자바에서 제공하는 애너테이션*노란색 부분은 메타에너테이션 - 애너테이션을 만들때 사용하는 애너테이션 @Override- 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.- 오버라이딩할 때 메서드 이름을 잘못 적는 실수를 하는 경우가 많다.  @Deprecated- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다. - @Deprecated의 사용 예, Date 클래의 getDate() @FunctionalInterface- 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크  함수형 인터페이스에는 ..

12-17 열거형

- 관련된 상수들을 같이 묶어 놓은 것. Java는 타입에 안전한 열거형을 제공 열거형의 정의와 사용- 열거형을 정의하는 방법 enum 열거형이름 { 상수명1, 상수명2, ... }  - 열거형 타입의 변수를 선언하고 사용하는 방법enum Direction { EAST, SOUTH, WEST, NORTH }    class Unit {            int x, y;             // 유닛의 위치            Direction dir     // 열거형 인스턴스             void init() {                  dir = Direction.EAST;  // 유닛의 방향을 EAST로 초기화              }        } - 열거형 상수의 비교에 ..

12-12 와일드 카드 / 제네릭 메서드

와일드 카드-하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능 와일드 카드의 상한 제한. T와 그 자손들만 가능 와일드 카드의 하한 제한. T와 그 조상들만 가능 제한 없음. 모든 타입이 가능와 동일 -메서드의 매개변수에 와일드 카드를 사용 +++와일드카드는 읽기 전용이다와일드카드를 사용하면, 해당 변수가 다양한 타입을 참조할 수 있지만, 새로운 객체를 추가하는 것은 허용되지 않는다.이게 중요한 차이점인데, 와일드카드는 타입을 유연하게 참조할 수 있게 해주는 반면, 그 안에 무언가를 추가하거나 변경하는 작업에 대해서는 불확실성을 발생시킬 수 있기 때문에 금지된다.(* 타입 안정성을 보장하기 위해서 쓰기를 제한함.    자바 컴파일러는 FruitBox2에 어떤 구체적인 타입이 들어갈지 확실하게 알지..

12-9 제한된 제네릭 클래스 / 제네릭스의 제약

제한된 제네릭 클래스- extends로 대입할 수 있는 타입을 제한- 인터페이스인 경우에도 extends를 사용class FruitBox extends Box { //Eatable은 interface} 제네릭스의 제약- 타입 변수에 대입은 인스턴스 별로 다르게 가능- static 멤버에 타입변수 사용 불가* static은 모든 인스턴스에 공통이기때문- 배열 생성할 때 타입 변수 사용 불가. 타입 변수로 배열 선언은 가능* 쉽게말해 new연산자 다음에 T를 쓸 수 없음. // 제네릭 배열 생성 불가