JAVA(248)
-
@Autowired를 이용한 의존관계 주입 방법
목차 스프링 빈 의존관계 주입 방법 의존관계 주입 옵션 처리 의존관계 주입 방법중 생성자 주입을 권장하는 이유 Lombok @RequiredArgsConstructor를 이용한 의존관계 주입 코드 단축하기 1. 스프링 빈 의존관계 주입 방법 스프링 컨테이너 등록된 스프링 빈간에 의존관계를 주입하기 위한 방법으로는 4가지 방법이 있습니다. 생성자 주입 setter 주입 필드 주입 일반 메소드 주입 1.1 생성자 주입 생성자 주입 방법은 클래스 안에 생성자를 이용하여 의존 관계를 주입받는 방법입니다. 생성자 주입 방법의 특징은 다음과 같습니다. 생성자 호출시점에 1번만 호출됩니다. 불변, 필수 의존관계에 사용됩니다. 불변적인 의존관계가 되면 의존관계가 한번 초기화되면 다른 객체로 변경되지 않음을 의미합니다...
2022.07.29 -
[Spring][IoC] Spring IoC Container & Bean
1. Spring IoC(Inversion of Control) IoC(Inversion of Control)은 제어의 역전이라는 의미로써 어떤 객체의 필드 멤버(참조 변수)에 직접 인스턴스를 생성하지 않고 생성자와 같은 방법을 통해서 주입받아 사용하는 방법을 의미합니다. 제어권을 갖고 있는 경우 class OwnerController{ private OwnerRepository repository = new OwnerRepository(); } 위 코드를 보면 OwnerController 클래스가 필드멤버인 OwnerRepository 인스턴스를 직접생성하는 것을 볼 수 있습니다. 이 상태는 OwnerController 클래스가 OwnerRepository 인스턴스에 대해서 제어권을 직접 갖는 것을 알..
2022.07.28 -
[Java][Generics] 지네릭스(Generics)
1. 지네릭스란 무엇인가? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(comptile-time type check)를 해주는 기능입니다. 지네릭스의 장점 타입 안정성을 제공합니다. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해집니다. 예를 들어 ArrayList 컬렉션 클래스에 타입을 지정하여 해당 클래스 타입의 인스턴스만을 담을 수 있습니다. ArrayList list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); 2. 지네릭 클래스의 선언 어떤 클래스를 지네릭 클래스로 변경하고자 한다면 다음과 같이 선언할 수 있습니다. class Box{ // 지네릭 타입 T를 선언 T item; ..
2022.07.22 -
[Java][Effective Java] item 14. Comparable을 구현할지 고려하라
1. Comparable을 구현할때 무엇을 고려해야 하는가? 알파벳, 숫자, 연대같이 순서가 명확한 값 클래스를 정의한다면 반드시 Comparable 인터페이스를 구현하자. Collection, Set, Map과 같은 인터페이스는 비교를 할때 Object.equals 메서드를 사용하지 않고 Comparable.compareTo 메서드를 사용하기 때문에 컬렉션과 같은 인터페이스에 인스턴스를 넣을때 Comparable을 구현하자. Comparable을 구현하지 않은 필드나 표준이 아닌 순서로 비교해야 한다면 비교자(Comprator)를 대신 사용하자. compareTo 메서드에서 관계 연산자 를 사용하는 이전 방식은 오류를 유발할 가능성이 있습니다. 클래스의 필드 멤버가 여러개 있고 비교해야 한다면..
2022.07.06 -
[Java][Thread] 쓰레드의 동기화 #4 fork & join 프레임워크
fork & join 프레임워크 JDK 1.7 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어줍니다. 1. fork & join 프레임워크 종류 RecursiveAction 반환값이 없는 작업을 구현할 때 사용 RecursiveTask 반환값이 있는 작업을 구현할 때 사용 RecursiveAction 추상 클래스 형식 public abstract class RecursiveAction extends ForkJoinTask{ ... protected abstract void compute(); // 상속을 통해 이 메서드를 구현해야함 ... } RecursiveTask 추상 클래스 형식 public abstract class RecursiveTask extends Fork..
2022.07.05 -
[Java][Thread] 쓰레드의 동기화 #3 volatile
1. volatile의 필요성 멀티 코어 프로세서 환경에서 쓰레드를 사용하는 경우 각각의 코어에는 별도의 캐시를 가지고 있습니다. 그리고 쓰레드를 수행하는 CPU 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업을 수행합니다. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인을 한 다음에 없을 때만 메모리에서 읽어오게 됩니다. 때문에 메모리에 저장된 변수의 값이 변경이 되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생합니다. 다음 예제는 쓰레드 3개의 이름을 출력하는 예제입니다. 주목할 점은 쓰레드 인스턴스의 메소드를 사용하지 않고 변수를 이용해서 중지했다가 다시 수행한다는 점입니다. public class Driver { public sta..
2022.07.05