본문 바로가기

Computer Sience66

[Design Pattern] 템플릿 메소드, 템플릿 콜백 (Template method, Template-Callback) 패턴 템플릿 메소드 (Template method) 패턴알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리즘을 제공한다    템플릿 메소드 (Template method) 패턴 beforeFileProcessor 클래스 public class FileProcessor { private String path; public FileProcessor(String path) { this.path = path; } public int process(){ try(BufferedReader br = new BufferedReader(new FileReader(path))) { .. 2024. 11. 25.
[Design Pattern] 전략 (Strategy) 패턴 전략 (Strategy) 패턴여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴컨텍스트에서 사용할 알고리즘을 클라이언트가 선택한다. 전략 (Strategy) 패턴 beforeBlueLightRedLight 무궁화 꽃 게임 public class BlueLightRedLight { private int speed; public BlueLightRedLight(int speed){ this.speed = speed; } public void blueLight(){ if(speed == 1) System.out.println("무 궁 화 꽃 이"); else if(speed == 2) System.out.println("무궁화꽃이");.. 2024. 11. 25.
[Design Pattern] 상태(State) 패턴 상태(State) 패턴 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴 상태에 특화된 행동을 분리해 낼 수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. OCP상태(State) 패턴 beforeStudent 클래스 public class Student { private String name; public Student(String name){ this.name = name; } private List privateCourses = new ArrayList(); public boolean isEnabledForPrivateClass(OnlineCourse onlineCourse){ return this.privateCour.. 2024. 11. 25.
[Design Pattern] 옵저버(Observer) 패턴 옵저버 (Observer) 패턴다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴 발행(publish) / 구독(subscribe) 패턴을 구현할 수 있다. 옵저버 (Observer) 패턴 beforeChat Serverpublic class ChatServer { private Map> messages; public ChatServer() { this.messages = new HashMap(); } public void add(String subject, String message){ if(messages.containsKey(subject)){ messages.get(subject).add(message); .. 2024. 11. 25.
[Design Pattern] 메멘토(Memento) 패턴 메멘토(Memento) 패턴캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법 객체 상태를 외부에 저장했다가 해당 상태로 다시 복구할 수 있다. 메멘토(Memento) 패턴 beforeGame 클래스 @Getter @Setterpublic class Game { private int redTeamScore; private int blueTeamScore;} Game 클래스는 간단하게 2가지 상태를 가진다.  Client 클래스 public class Client { public static void main(String[] args) { Game game = new Game(); game.setRedTeamScore(10); game.setBl.. 2024. 11. 7.
[Effective Java] 아이템18 상속보다는 컴포지션을 사용하라 상속(Inheritance)의 위험성상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다.상위 클래스와 하위 클래스가 모두 같은 개발자가 통제하는 패키지 안에서라면 상속도 안전한 방법이다.확장할 목적으로 설계되었고 문서화가 잘 된 클래스라면 마찬가지로 안전하다. 하지만 일반적으로 구체 클래스를 다른 패키지의 구체 클래스를 상속하는 일은 위험하다.  왜 위험할까? 메소드 호출과 달리 상속은 캡슐화를 깨트린다. 상위 클래스가 어떻게 구현되느냐에 따라서 하위 클래스의 동작에 이상이 생길 수 있다. @Getterpublic class InstrumentedHashSet extends HashSet { private int addCount = 0; public InstrumentedHashS.. 2024. 11. 5.