전체 글 6

[IntelliJ] Lombok 설치 방법

https://start.spring.io/ 에서 스프링 프로젝트를 생성할 수 있다. 이 때 Dependency에서 lombok을 추가할 수 있는데 lombok 추가 후에 프로젝트를 열고 나서 추가적인 세팅이 필요하다 1. 맥북 기준으로 IntelliJ IDEA -> Settings 클릭 2. plugins으로 이동하여 lombok 검색 후 다운로드 3. Annotaion Processors로 이동하여 Enable annotation processing 클릭 -> Apply -> OK 클릭 Lombok이 잘 작동하는것을 볼 수 있다.

IntelliJ 2024.04.20

[Spring] 의존관계 주입 방법

다양한 의존관계 주입 방법 1. 생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법이다. 특징 : 생성자 호출 시점에 딱 1번 호출됨. -> 불변, 필수 의존관계에 사용한다. 생성자가 딱 한개 있을 때는 @Autowired를 설정하지 않아도 자동으로 등록해준다. 2. 세터(Setter) 주입 setter라고 불리는 필드 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다. 특징 : 선택, 변경 가능성이 있는 의존관계에 사용한다. 3. 필드 주입 필드에서 바로 의존관계를 주입하는 방법이다 특징 : 외부에서 변경이 불가능하여 코드가 간결해지지만 테스트가 힘들고 DI 프레임워크가 없으면 아무것도 없기 때문에 사용하지 말자!! 애플리케이션의 실제 코드와 관계없는 테스트코드, 스프링 설정을 목..

스프링 2024.04.18

[Spring] 웹 애플리케이션과 싱글톤

대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 대부분 여러 고객이 동시에 요청을 한다. 만약 고객의 요청마다 객체가 계속 생성이 되면 어떻게 될까? @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberService1 = " +..

스프링 2024.04.16

[Spring] 스프링 컨테이너에 존재하는 빈 조회하기

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("애플리케이션 출력하기") void findApplicationBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if(beanDefinition.getRole() == BeanDefinition.RO..

스프링 2024.04.16

[JAVA] 좋은 객체지향 프로그래밍은 무엇일까?

역할과 구현을 분리! - 역할과 구현을 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다. - 장점 - 클라이언트는 대상의 역할(인터페이스)만 알면 됨 - 클라이언트는 구현 대상의 내부 구조를 몰라도 된다. - 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. - 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다. 자바에서는 어떻게? - 다형성을 활용함. - 역할 = 인터페이스 - 구현 = 인터페이스를 구현한 클래스, 구현 객체 - 객체를 설계할 때 역할과 구현을 명확히 분리 - 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기 ---> 결국 역할이 중요하다. 다형성의 본질 -> 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하..

자바 2024.04.11

[자료구조, JAVA] 트리 개념, 구현

1. 트리의 구조 노드(Node) : 트리 구조의 자료 값을 담고 있는 단위 에지(Edge) : 노드 간의 연결선( = link, branch) 루트 노드(Root) : 부모가 없는 노드, 가장 위의 노드 잎새 노드(Leaf) : 자식이 없는 노드 (= 단말 노드) 내부 노드(Internal) : 잎새 노드를 제외한 모든 노드 부모 노드(Parent) : 연결된 두 노드 중 상위의 노드 자식 노드(Child) : 연결된 두 노드 중 하위의 노드 형제(Sibling) : 같은 부모를 가지는 노드 깊이(Depth) : 루트에서 어떤 노드까지의 간선의 수 ex) H 같은 경우 A(루트) -> B -> D -> H 로 총 에지(->)가 3개 있으므로 깊이는 3이다. 레벨(Level) : 트리의 특정 깊이를 가지..

자료구조 2024.03.08