java 23

[JAVA] DFS 깊이 우선 탐색

DFS 깊이 우선 탐색: DFS(Depth First Search)는 하나의 정점으로부터 시작하여 깊은 곳 우선으로 탐색하여, 더 이상 갈 곳이 없을 경우 이전 단계로 되돌아가 다른 경로를 탐색해 최종적으로는 연결된 모든 정점을 탐색하는 방법이다.  📍 DFS 특징재귀적 또는 스택을 이용해 구현한다.각 정점의 방문 여부를 확인하기 위해 방문 배열을 사용한다. (예. int[] visited)그래프가 순환 구조를 가질 경우, 무한 루프 방지를 위해 반드시 방문 여부를 체크해야 한다. 📍 DFS 시간 복잡도인접 리스트 사용 시 : O(V+E) → V: 노드 수/ E: 간선 수인접 행렬 사용 시 : O(V^2) 📍 DFS 동작 알고리즘1. 시작 노드를 방문하고 방문 여부를 체크한다.2. 해당 노드와 연결..

[JAVA] BFS 너비 우선 탐색

BFS(Breadth-First Search) , 너비 우선 탐색: 그래프 또는 트리 탐색 알고리즘 중 하나로 너비 우선으로 탐색을 진행한다. BFS는 특정 노드에서 시작해 인접한 노드들을 먼저 탐색한 뒤 그 다음 단계의 노드들을 탐색하는 방식으로 작동한다. 📍BFS의 특징너비 우선 탐색 : 현재 노드와 인접한 모든 노드를 탐색한 후에 다음 깊이로 진행.최단 경로 보장 : 가중치가 없는 그래프에서 시작 노드와 목표 노드 간의 최단 경로 보장.큐 사용 : 탐색 과정에서 방문할 노드들을 큐에 저장하여 FIFO(First In, First Out) 방식으로 처리.방문 처리 필요 : 이미 방문한 노드를 다시 탐색하지 않도록(무한 루프 방지) 방문 여부를 체크하는 배열 또는 집합 사용. 📍BFS의 동작 흐름1..

[Spring] Section9_빈 스코프

인프런스프링 핵심 - 기본편김영한Section9_빈 스코프​빈 스코프스코프 : 빈이 존재할 수 있는 범위스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지될 수 있는 이유(싱글톤)다양한 스코프 존재 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은 스코프 (종료 메서드 호출 X)웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프application : 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프​🪄 싱글톤 스코..

[Spring] Section8_빈 생명주기 콜백

인프런스프링 핵심 - 기본편김영한Section8_빈 생명주기 콜백​데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행 → 객체의 초기화와 종료 작업 필요.NetworkClient는 애플리케이션 시작 시점에 Connect() 호출로 연결 맺기, 종료 시점에 disConnect() 호출로 연결 끊기​스프링 빈의 라이프 사이클객체 생성 → 의존 관계 주입 (생성자 주입은 예외, 객체를 만들 때 이미 스프링 빈에 들어와야 함.)객체 생성 후 의존 관계 주입이 다 끝나야 데이터 사용 준비 끝 → 초기화 작업완료 시점을 알 수 있는 방법은 “콜백 메서드”스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 ..

[Spring] Section7_의존관계 주입

인프런스프링 핵심 - 기본편김영한Section7_의존관계 주입​의존 관계 주입 방법생성자 주입setter 주입필드 주입일반 메서드 주입​🪄 생성자 주입 권장 ! (의존 관계 불변해야 함.)​생성자 주입: 생성자를 통해서 의존 관계를 주입 받는 방법.생성자 호출 시점에 딱 한 번만 호출되는 것 보장불변, 필수 의존 관계에 사용생성자가 딱 1개이면 @Autowired 생략해도 자동 주입됨. (스프링 빈만 해당)​setter 주입: 수정자 메서드를 통해서 의존 관계를 주입 받는 방법.선택, 변경 가능성이 있는 의존 관계에 사용@Autowired 의 기본 동작은 주입할 대상이 없으면 오류 발생. 주입 대상이 없어도 동작하게 하려면 @Autowired(required=false) 로 지정. → default는 ..

[Spring] Section6_컴포넌트 스캔

인프런스프링 핵심 - 기본편김영한Section6_컴포넌트 스캔​컴포넌트 스캔@ComponentScan : @Component 가 붙은 모든 클래스를 스프링 빈으로 등록함.@Component 어노테이션이 붙은 클래스를 스캔 해서 스프링 빈으로 자동 등록.Component @Autowired : 의존 관계 자동 주입AnnotationConfigApplicationContext(컨테이너⇒Bean으로 지정된 객체들을 가지고 있는 Context) 사용은 동일 → 설정 정보는 AutoAppConfig.class스프링 빈의 이름은 클래스명을 사용 → 맨 앞 글자는 소문자🪄 Configuration → 구성 / Context → 문맥, 맥락​의존 관계 자동 주입@Autowired 지정 시 스프링 컨테이너가 자동으로 ..

[Spring] Section5_싱글톤 컨테이너

인프런스프링 핵심 - 기본편김영한Section5_싱글톤 컨테이너웹페이지는 동시에 클라이언트가 접속 → 스프링 없는 순수한 DI 컨테이너(AppConfig)는 요청할 때마다 객체를 새로 생성함.solution) 객체가 1개만 생성되고 공유되도록 설계해야 함. → “싱글톤 패턴”​싱글톤 패턴: 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하게 막아야 함.static 사용 → 싱글톤 패턴 이 객체 인스턴스가 필요하면 getInstance() 메서드를 통해서만 조회할 수 있음. → 이 메서드를 호출하면 항상 같은 인스턴스 반환.딱 1개의 객체 인스턴스만 존재해야 하므로, 생성자를 private으로 막아서 외부에서 ne..

[Spring] Section4_스프링 컨테이너와 스프링 빈

인프런스프링 핵심 - 기본편김영한 Section4_스프링 컨테이너와 스프링 빈​ApplicationContext스프링 컨테이너, 인터페이스임.AnnotationConfigApplicationContext 가 구현체보통 어노테이션 기반으로 생성 (Xml 기반도 가능)BeanFactory, ApplicationContext 로 구분빈 이름은 항상 다른 이름으로 부여 → 중복X단계 ⇒ 빈생성 후 의존관계 주입​스프링 빈 조회기본 ac.getBean(빈 이름, 타입)ac.getBean(타입)동일한 타입이 둘 이상일 경우 ac.getBeansOfType() → 해당 타입의 모든 빈 조회 가능상속 관계 부모 타입으로 조회하면 자식 타입도 함께 조회됨.모든 객체의 최고 부모는 Object​BeanFactory: 스프..

[Spring] Section3_스프링 핵심 원리2

인프런스프링 핵심 원리 - 기본편김영한Section3_스프링 핵심 원리2​관심사 분리A interface의 구현체인 A’ 이 B interface의 구현체를 직접 선택 (B’ or B’’) → DIP 위반그러므로 구현체를 선택해주는 역할이 따로 필요함 → “관심사의 분리”​AppConfig: Application의 전체 동작 방식을 구성(config) 하기 위해 구현 객체를 생성하고, 연결생성자 주입 ⇒ AppConfig가 Application의 실제 동작에 필요한 구현 객체를 생성함.구현체가 다른 구현체를 의존하지 않음. interface만 의존 → DIP 성립객체의 생성과 연결은 AppConfig가 담당함.AppConfig 리팩터링 ⇒ 역할과 구현의 관계가 잘 드러나야 함. 중복 제거.​좋은 객체 지..

[Spring] Section2_스프링 핵심 원리 이해1

인프런스프링 핵심 원리 - 기본편김영한Section2_스프링 핵심 원리 이해1​Build ToolGradle → JVM에서 실행되는 스크립트 언어, 자바와 호환됨.Maven, Ant 등도 존재함.빌드 자동화 도구 : Project에 필요한 의존성들의 관리와 패키징 작업을 도와준다.​다이어그램도메인 클래스 다이어그램(Static)객체 다이어그램(Dynamic)Enum : 관련 있는 상수들의 집합 (열거형)HashMap은 동시성 이슈가 발생할 수 있으므로 실무에서는 ConcurrentHashMap(Multi-Thread)을 사용함.​Junit: 자바 환경에서 가장 많이 사용하는 테스팅 기반 프레임워크@Test : 테스트 메소드임을 나타냄.Lifecycle Method : @BeforeAll, @BeforeE..