Java 92

[헤드퍼스트 디자인 패턴] 2. 옵저버 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 옵저버 패턴한 객체의 상태 변화가 있을 때, 그 객체에 의존하는 다른 객체들에게 자동으로 알림을 보내고, 이를 갱신할 수 있게 해주는 패턴일대다 형식으로 객체간 관계 정의 구성 요소역할(Role)설명Subject- state: 상태를 보유하고 관리함- notify: 상태 변경 시 옵저버들에게 알림- 옵저버 등록/제거 기능 제공Observer- Subject의 상태에 의존함- Subject의 상태 변경 시 알림을 받고 처리 (update 메서드 등 구현) 느슨한 결합서로 강하게 연결되어 있지 않지만, 상호작용 할 수 있는 관계구분설명추상화- Subject는 Observer 인터페이스에만 의존- 구체 구현을 몰라도 동작 가능유연성-..

Java/Design Pattern 2024.12.16

[헤드퍼스트 디자인 패턴] 0. 디자인 패턴이란

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 디자인 패턴객체지향 설계에서 자주 발생하는 문제에 대한 해결책코드의 재사용성, 관리 용이성, 유연성을 높일 수 있음 장점장점설명서로 이해할 수 있는 용어 제공개발자 간 공통된 개념과 용어로 의사소통이 쉬워짐표준화된 해결방법 제공반복되는 문제에 대해 검증된 해결책을 제공함유연성 및 유지보수 용이성변경에 강하고, 코드의 수정 및 확장이 용이함구조 개선코드 구조를 명확히 하여 가독성과 재사용성을 높임 2. 객체지향 기초객체와 클래스를 중심으로 소프트웨어를 설계하고 구현하는 방법론 주요 개념개념정의추상화중요한 정보만 드러내고 불필요한 세부 사항은 숨김- 인터페이스 중심 설계: 구현 세부사항을 숨기고 시스템 유연성과 확장성 확보캡슐화데이..

Java/Design Pattern 2024.12.16

[헤드퍼스트 디자인 패턴] 1. 전략 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 오리 시뮬레이션 게임Duck 클래스를 슈퍼클래스로 생성각 오리 종류를 서브클래스로 두어 Duck 클래스를 상속함 (MallardDuck, RedheadDuck, RubberDuck) 심각한 문제 발생슈퍼클래스에 추상메서드 추가 시, 모든 서브클래스에서 구현이 강제됨몇몇 서브클래스에만 적용되어야 할 메서드일 경우, 논리적으로 오류가 발생함 예: fly()더보기// 상위 클래스abstract class Duck { public abstract void fly(); // 👈 모든 Duck에게 fly() 강제 public abstract void quack();}// MallardDuck는 날 수 있음class Malla..

Java/Design Pattern 2024.12.16

[Java][Tutorial] 1-3. Learning the Java Language: Classes and Objects

The Java Tutorials have been written for JDK 8 3. Classes and ObjectsConstant값을 수정할 수 없는 필드입니다.final 키워드로 표기합니다. Access Control외부 클래스로부터 접근 제한 레벨을 지정하는 키워드입니다. Inner Classes클래스 내부에 선언된 클래스 입니다. 접근 제한 Static class : 밖에 있는 필드에 접근할 수 없습니다.Non-Static class : 밖에 있는 필드에 접근할 수 있습니다. Nested Classes내부 클래스를 가지고 있는 클래스 사용하는 이유오직 클래스 안에서만 사용되도록 논리적으로 묶는 유용한 방법입니다.캡슐화 효과를 얻을 수 있습니다. 직렬화중첩 클래스의 직렬화는 비권장됩니다.내..

Java 2024.01.14

[Java][Tutorial] 1-2. Learning the Java Language: Language Basics

The Java Tutorials have been written for JDK 8 1. Variables자료를 저장하기 위한 메모리 공간 입니다.타입에 따른 메모리가 할당됩니다. member variable항목Instance VariableClass Variable (Static Field)정의인스턴스마다 개별로 존재하는 변수클래스당 하나만 존재하는 변수생성 시기객체가 생성될 때클래스가 JVM에 로딩될 때생성 위치각각의 객체별로 Heap 메모리에 생성됨클래스 영역 또는 Heap의 메서드 영역에 생성됨 (클래스별)공유 여부공유되지 않음모든 인스턴스가 같은 변수를 공유함사용 예시개별 사용자 이름, 나이 등전역 설정값, 공통 카운터, 상수 등값 변경각 인스턴스가 자유롭게 변경 가능하나가 바꾸면 모두에게 반영..

Java 2024.01.14

[Java의 정석] 13-3. 스레드: 실행 제어

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 8. 실행 제어 상태NEW스레드가 생성되고 아직 start()되지 않은 상태RUNNABLE실행중 또는 실행 가능한 상태BLOCKED동기화 블럭에 의해 일시정지된 상태WAITING,TIMED_WAITING일시정지 상태(작업이 종료되지 않음) 일시정지 시간이 지정된 경우TERMINATED작업이 종료된 상태  메서드sleep()지정된 시간동안 스레드를 정지시킵니다.지정한 시간이 지나고 나면 자동적으로 다시 실행대기 상태가 됩니다.join()다른 스레드의 작업이 끝날 때까지 대기하도록 만드는 메서드지정한 시간동안 실행되도록 합니다.지정한 시간이 지나거나 작업이 종료되면 join()을 호출한 스레드는 다시 돌아와 실행됩니다suspend()스레드를 일시..

Java 2023.11.30

[Java의 정석] 13-4. 스레드: 동기화

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 9. 동기화한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게 막는 것입니다.멀티스레드의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하므로 서로의 작업에 영향을 주게 됩니다.한 스레드가 특정 작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것이 필요합니다. 임계영역공유데이터를 사용하는 코드 영역입니다. Lock단 하나의 스레드만 공유데이터를 사용하도록 하는 매커니즘입니다.해당 공유데이터를 사용하는 스레드는 락을 획득합니다.임계영역의 모든 코드를 수행하고 나서 락을 반납하며, 다른 스레드가 반납된 락을 획득하여 임계영역에 접근할 수 있습니다. synchronizedsynchronized 키워드를 붙여 임계영역..

Java 2023.11.30

[Java의 정석] 15-6. 입출력: Serialization

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 7. Serialization객체를 데이터 스트림으로 만드는 것을 뜻합니다.객체를 파일로 저장하거나 네트워크를 통해 서로 주고받을 때 필요합니다. 객체직렬화에서의 객체는 "클래스에 정의된 인스턴스 변수의 집합"을 의미합니다.클래스 변수나 클래스 메서드가 포함되지 않습니다.역직렬화 시에 클래스 관련 정보는 불필요합니다.내용물인 변수 값만 가지고 있으면 인스턴스를 메모리에 올릴수 있습니다. ObjectInputStream & ObjectOutputStream객체를 다루는 보조 스트림 입니다.인스턴스 변수의 직렬화에 사용됩니다.직렬화 시 참조 타입의 객체 변수도 모두 포함됩니다.FileOutputStream fos = new FileOutputStr..

Java 2023.11.29

[Java의 정석] 15-5. 입출력: File

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 6. File파일 또는 디렉토리를 추상적으로 표현하는 클래스파일 또는 디렉토리를 다루는데 사용됩니다. 제어// 파일이름 (경로 포함)File f = new File("c:\\jdk1.8\\work\\ch15\\FileEx1.java"); // 디렉토리 경로, 파일이름 (경로 제외)File f = new File("c:\\jdk1.8\\work\\ch15", "FileEx1.java"); f.getName(); // 파일이름 (경로 제외)f.getPath(); // 경로f.getAbsolutePath(); // 절대경로f.getCanonialPath(); // 정규경로f.getParent(); // 디렉토리 경로File.pathSeparator; ..

Java 2023.11.29

[Java의 정석] 15-4. 입출력: 표준 입출력

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 5. 표준 입출력콘솔을 통한 데이터 입력과 출력을 의미합니다.자바에서는 표준 입출력을 위한 3가지 입출력 스트림을 제공합니다.자바 애플리케이션의 실행과 동시에 자동적으로 생성됩니다. System.in콘솔로부터 데이터를 입력받는데 사용하는 입력 스트림입니다.InputStream System.out콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.PrintStream System.err콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.에러 로그 출력 전용으로 사용됩니다.PrintStream

Java 2023.11.29