본문 바로가기

java30

[JAVA] 추상클래스 (abstract) / 인터페이스 (interface) ■ 추상클래스 (abstract) - 추상 메서드를 선언하여 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스 "미완성 설계도" - 클래스를 abstract로 지정하면 new를 통해 객체 생성 X - interface의 메소드와 다르게 구현 부분 X - abstract로 선언한 메소드를 반드시 자식 클래스에서 구현해야 함(오버라이딩) - 다중 상속 X ■ Code abstract class 클래스A{ public abstract void 메서드(); } class classB extends classA{ @Override public void 메서드(){ ... //구현 } } ■ 인터페이스 (interface) - 추상 클래스와는 다르게 구현부가 있는 일반 메서드, 일반 변수 멤버 등을 가질 수 .. 2023. 8. 7.
[Spring 기본] 컴포넌트 스캔 (Component Scan) 컴포넌트 스캔 (Component Scan) - 스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 - 스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법 / 컴포넌트 스캔과 자동 의존관계 설정하는 @Autowired를 사용하는 방법이 있음 - @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 - @Configuration, @Service, @Repository, @Controller, 등의 어노테이션에도 전부 @Component이 포함되어 있어 자동으로 컴포넌트 스캔의 대상 - @Autowired: 의존관계 자동 주입 ■ 컴포넌트 스캔과 자동 의존관계 주입 동작 - @Co.. 2023. 8. 4.
[Spring 기본] 싱글톤 컨테이너 (Singleton Container) ■ 웹 애플리케이션과 싱글톤 - 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분이 웹 애플리케이션 / 웹이 아닌 개발도 얼마든지 개발 가능 - 웹 애플리케이션은 보통 여러 고객이 동시 요청 - 기존에 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청 할 때마다 객체 새로 생성 - 메모리 낭비 → 해결방안: 싱글톤 패턴!! ■ 싱글톤 패턴 - 클래스의 인스턴스(객체)가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 객체 인스턴스를 2개 이상 생성하지 못하도록 방지 → private 생성자를 사용해 외부에서 임의로 new 키워드를 사용하지 못하도록 함 ■ 싱글톤 패턴 구현 방법 - static 영역에 객체 instance를 미리 하나 생성 - 오직 getInstan.. 2023. 8. 3.
[Spring 기본] 스프링 컨테이너/스프링 빈 (Spring Container/Bean) 스프링 컨테이너: 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 스프링 컨테이너에 적용된다. 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸하지만, 스프링 컨테이너를 사용하면 해당 역할을 대신해 준다. 즉, 제어 흐름을 외부에서 관리하고, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. 스프링 빈: 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. 스프링 컨테이너 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음 ex) ApplicationContext, BeanFactory ● 스프링 컨테이너.. 2023. 8. 2.
[Spring 기본] SOLID원칙과 IoC, DI ■ 좋은 객체 지향 설계 5가지 원칙 (SOLID) SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 코드 작성시 발생하는 DIP 문제 예시 클라이언트 코드 OrderServiceImpl 은 DiscountPolicy의 인터페이스 뿐만 아니라 구체 클래스도 함께 의존 → 이를 해결하기 위함이 관심사 분리 → 애플리케이션의 전체 동작 방식을 구성(config).. 2023. 7. 31.
[HTTP] HTTP Method ■ HTTP 주요 메서드 GET: 리소스 조회 POST: 요청 데이터 처리, 주로 등록에 사용 PUT: 리소스 대체, 해당 리소스가 없으면 생성 PATCH: 리소스 부분 변경 DELETE: 리소스 삭제 ● GET 리소스 조회 서버에 전달하고 싶은 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달 ● POST 요청 데이터 처리 메시지 바디를 통해 서버로 요청 데이터 전달 서버는 요청 데이터 처리 (메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능 수행 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용 ● PUT 리소스를 대체 (리소스가 있으면 대체, 리소스가 없으면 생성) → 덮어씌움 클라이언트가 리소스를 식별 (클라이언트가 리소스 위치를 알고 URI 지정 → POST와 차이점) ●.. 2023. 6. 25.
[Algorithm] 구간 합 (Prefix Sum) 구간 합 (Prefix Sum) ■ 정의 - 수들의 나열에서 특정 구간의 합을 의미 - 보통 1차원 배열에서 인덱스 사이의 값들의 합을 구하는데 사용 ■ 구간 합 알고리즘 - 구간 합 공식: sum[j] - sum[i - 1] // i에서 j까지의 구간 합 - 합 배열(P)을 미리 계산해 두면 구간 합은 한 번에 계산 가능 - 알고리즘의 시간복잡도: O(1) ■ Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class No11659 { public static void main(String[] args) .. 2023. 5. 1.
[Algorithm] 힙 정렬 (Heap Sort) 힙 정렬 (Heap Sort) ■ 정의 - 최솟값 또는 최댓값을 빠르게 찾아내기 위해 완전이진트리 형태로 만들어진 자료구조 - 힙(heap)을 사용하여 정렬하는 알고리즘 · 힙(heap)이란?: '부모값이 자식값보다 항상 크다' 조건을 만족하는 완전이진트리 · 최대힙: 부모노드 값(key 값) ≤ 자식노드 값 (key 값) · 최소힙: 부모노드 값(key 값) ≥ 자식노드 값 (key 값) ■ 인덱스 관계 - 부모노드 인덱스: a[(i-1) / 2] - 왼쪽 자식노드 인덱스: a[i * 2 + 1] - 오른쪽 자식노드 인덱스: a[i * 2 + 2] ■ 힙 정렬 과정 Step 1. 최대 힙의 루트 노드를 마지막 배열 값과 교환, 가장 큰 값을 마지막 배열에 저장 후 힙에서 제거 Step 2. 다시 힙을 .. 2023. 4. 8.
[Algorithm] 탐욕 알고리즘 (Greedy Algorithm) 탐욕 알고리즘 (Greedy Algorithm) ■ 정의 다음 그림에서 최댓값을 구하려면 그림1과 같이 5 + 7 + 9 = 21로 구할 것이다. 하지만 탐욕 알고리즘은 그 순간마다 최적의 선택을 하기 때문에 그림2와 같이 5 + 10 + 4 = 19를 구할 것이다. 이처럼 탐욕 알고리즘은 지금 당장 좋은 것만을 고르며, 현재 선택이 나중에 미칠 영향은 고려하지 않는다. 따라서 순간마다 하는 선택은 그 순간에 대해 지역적으로는 최적이지만, 그 선택들을 계속 수집하여 최종적인 해답을 만들었다고 해서, 그것이 최적이라는 보장은 없다. 따라서, 탐욕 알고리즘 해법은 그 정당성 분석이 중요하다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토한다. 거스름 돈, 활동 선택, 최.. 2023. 4. 3.
[자료구조] 이진 트리 (Binary Tree) Binary Tree (이진 트리) 각 노드가 최대 2개의 자식을 갖는 트리 ■ 정의 - 루트: 트리의 가장 윗부분에 위치하는 노드 - 리프: 트리의 가장 아랫부분에 위치하는 노드 - 안쪽 노드: 리프를 제외한 나머지 노드(루트 포함) - 자식: 어떤 노드에서 가지로 연결된 아래쪽 노드 - 부모: 어떤 노드에서 가지로 연결된 바로 위쪽 노드 - 형제: 부모가 같은 노드 - 레벨: 루트로부터 얼마나 떨어져 있는지를 나타낸 값 - 차수: 노드가 갖는 자식의 수 - 높이: 루트에서 가장 멀리 떨어진 리프까지의 거리 - 서브트리: 트리 안에서 다시 어떤 노드를 루트로 정하고 그 자손으로 이루어진 트리 Binary Tree(이진 트리) 순회 방법 ■ 정의 ● preorder (전위 순회) : root Node -.. 2023. 3. 29.