전체 글138 [Design Pattern] 전략 패턴 전략 패턴이란 알고리즘을 캡슐화하여 런타임 중 객체 동작을 동적으로 교체할 수 있도록 설계하는 디자인 패턴을 의미한다.객체의 행위를 정의하는 알고리즘을 별도의 클래스로 분리, 이를 사용하는 객체(Context)가 특정 행동(Strategy)을 주입받아서 실행한다.전략 패턴의 주요 구성 요소 1. Strategy(전략 인터페이스)알고리즘(행동)을 정의하는 공통 인터페이스.다양한 구체 전략(Concrete Strategies)들이 해당 인터페이스를 구현하여 각기 다른 알고리즘을 제공.public interface Strategy { void execute();} 2. ConcreteStrategy(구체적인 전략)Strategy 인터페이스를 구현하며, 알고리즘(행동)을 정의.class StrategyA.. 2024. 12. 25. [Design Pattern] 템플릿 메서드 패턴 템플릿 메서드 패턴이란 여러 클래스에서 공통으로 사용하는 메서드(변하지 않는 기능)를 템플릿이라는 상위 클래스에 정의하고 세부 동작을 하위 클래스에서 구현하도록 하는 패턴이다.Abstract Class (추상 클래스)알고리즘의 구조(템플릿 메서드)를 정의공통적으로 처리하는 일부 메서드는 구현하며, 나머지는 추상 메서드로 선언되어 하위 클래스에서 구현Concrete Class (구체 클래스)상위 클래스에서 정의된 추상 메서드를 구현구현한 메서드는 상위 클래스에서 제공하는 템플릿 메서드를 통해서 순서대로 호출훅(Hook)템플릿 메서드 패턴에서 선택적으로 재정의할 수 있는 기본 구현을 제공하는 메서드로 추상 메서드가 아닌 일반 메서드로 구현반환 타입을 boolean으로 구현하여 부모의 템플릿 메서드의 순서를 .. 2024. 12. 25. [자바] URL 인코딩 웹은 데이터를 전송할 때 URL의 특정 문자들을 인코딩해서 전송한다.왜냐하면 HTTP 메세지에서 start line, HTTP 헤더의 이름은 항상 ASCII를 사용하기 때문이다.(메세지 바디는 UTF-8 같은 다른 인코딩 방식 사용 가능)따라서 URL에 적을 수 없는 문자를 전송할 수 있도록 변환하여 데이터의 변조나 손실이 없게 하기 위함이다.퍼센트 인코딩 방식위에서 ASCII 문자만 URL에 적을 수 있다고 하였다. (공백, 특수문자도 불가능)그럼 URL에 한글이 포함되면 어떻게 될까?예를 들어 UTF-8은 한글을 3byte로 표현한다. 즉 한글 ‘가’의 경우 [EA, B0, 80]의 바이트 집합으로 변환된다.그리고 이렇게 16진수로 표현된 바이트에 %를 붙인다.즉 ‘가’ → %EA%B0%80 으로 인.. 2024. 12. 25. [자바] 애노테이션(Annotation) 애노테이션은 사전적 의미로 주석이라는 뜻이다.즉 애노테이션은 프로그램 코드가 아니며 주석과 비슷하다고 이해하면 된다. 하지만 일반적인 주석은 컴파일 시점에 모두 제거가 되지만, 애노테이션은 런타임 시점에 해석가능한 메타데이터를 제공해서 활용할 수 있다는 차이가 있다.애노테이션 정의 방법public @interface MyAnnotation { String value(); int count() default 0; String[] tags() default {}; Class data() default Target.class; // 클래스 정보는 가능}@interface 키워드로 애노테이션을 정의한다.모든 애노테이션은 Annotation 인터페이스를 확장하지만 위와 같이 정의만 하면 상속.. 2024. 12. 25. [자바] 리플렉션 리플렉션이란 자바에서 클래스가 제공하는 다양한 정보를 동적으로 분석하고 사용하는 기능을 의미한다. 해당 기능을 통해 런타임 시점에 클래스에 메타데이터 정보를 얻거나, 동적으로 새로운 객체를 생성, 메서드 호출, 필드 값을 을 읽고 쓸 수 있다.클래스 메타데이터 조회 3가지클래스 타입으로 조회Class targetClass = Target.class;인스턴스에서 조회Target target = new Target();Class targetClass = target.getClass();문자(패키지+클래스명)를 통한 조회String targetPackage = "reflection.ReflectionTest";Class targetClass = Class.forName(targetPackage);3번의 경우를.. 2024. 12. 25. [자바] 소켓 프로그래밍 소켓은 네트워크 상에서 프로세스 간의 통신을 위한 양쪽 끝단을 의미한다.이러한 소켓을 통해 송신자와 수신자를 연결하고 네트워크 상에서 장치를 식별하기 위한 IP, 해당 장치에서 응용프로그램을 식별하기 위한 포트를 사용하여 클라이언트와 서버 간의 데이터 전송을 가능하게 하는 역할을 한다.TCP 소켓 (stream 소켓)신뢰성 있는 데이터 전송을 제공하는 연결 지향 프로토콜로 데이터의 순서와 무결성을 보장한다.UDP 소켓 (datagram 소켓)비연결형 프로토콜로, 빠른 데이터 전송이 가능하지만, 데이터의 순서나 무결성을 보장하지 않는다. (Best- Effort)소켓 통신 흐름클라이언트 동작 과정socket 생성 → socket()서버에게 요청을 보내고 connection을 맺음. → connect()서버.. 2024. 12. 25. [자바] I/O 스트림 입출력 스트림은 데이터를 읽고 쓰는 것을 추상화 한 것으로 자바 프로그램이 외부로부터 데이터를 읽거나 내보내기 위한 통로 역할을 한다.입력 스트림 : 외부에서 데이터를 읽는데 사용출력 스트림 : 자바 내부의 데이터를 외부로 내보내는데 사용스트림 주요 메서드InputStreamint read() : 하나의 바이트를 읽고, 읽은 바이트의 정수 값을 반환. 더 이상 읽을 바이트가 없으면 -1int read(byte[] b) : 바이트 배열에 데이터를 읽어 저장. 읽은 바이트 수를 반환하며, 더 이상 읽을 바이트가 없으면 -1int read(byte[] b, int off, int len):바이트 배열의 특정 오프셋에서 시작하여 최대 len 바이트를 읽음.읽은 바이트 수를 반환, 더 이상 읽을 바이트가 없으면 .. 2024. 12. 25. [자바] 스레드 풀, Executor 스레드를 직접 생성해서 사용하면 다음과 같은 문제가 있다.스레드 생성 시간으로 인한 성능 저하스레드를 생성하는 작업은 커널 수준에서 시스템 콜에 의해 처리 → CPU 메모리와 리소스 사용스레드는 독립적인 스택 영역을 가짐 → 메모리 소모스레드의 관리가 어려움CPU, 메모리 자원이 한정적이므로 스레드는 무한하게 생성될 수 없음 + 인터럽트를 이용해 스레드를 급하게 종료해야 하거나 남은 스레드 작업을 확인해야하는 상황 → 스레드 관리가 필요함Runnable 인터페이스의 불편함Runnable 인터페이스는 반환 값 X, 체크 예외를 던질 수 없어 메서드 내부에서 예외 처리가 필요위의 1, 2번 문제를 해결하기 위해 스레드를 생성하고 관리하는 풀이 필요한데 이를 스레드 풀이라고 한다.스레드 풀스레드 풀이란 말 그.. 2024. 12. 25. [자바] 동시성 컬렉션 자바의 컬렉션들은 대부분 Thread Safe(여러 스레드가 동시에 접근해도 안전한가) 하지 않다. 컬렉션 내부의 메서드들은 대부분 원자적 연산이 아니기 때문이다. 일반적으로 사용하는 컬렉션을 멀티스레드 상황에서 사용하면 어떻게 되는지 보자.public class ProxyTest { public static void main(String[] args) throws InterruptedException { List list = new ArrayList(); test(list); System.out.println("list = " + list + " size = " + list.size()); } public static void test(Collect.. 2024. 12. 25. 이전 1 ··· 10 11 12 13 14 15 16 다음