본문 바로가기

Computer Sience70

[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.
[Effective Java] 아이템15 클래스와 멤버의 접근 권한을 최소화해라 왜 아이템 13, 14는 정리 안 하는지?아이템13은 최근에 프로토타입 패턴을 공부하면서 Object clone(), Cloneable 인터페이스, shallow copy, deep copy 개념을 정리했기 때문에 pass 한다. https://20240228.tistory.com/351 [Design Pattern] 프로토타입 (Prototype) 패턴프로토타입 (Prototype) 패턴기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법프로토타입 패턴은 객체를 생성할 때, 기존 객체를 복사하여 새로운 객체를 만드는 생성 패턴 중 하나20240228.tistory.com 아이템14는 Comparable 관련 내용인데 이미 코테를 준비 하면서 자세하게 알던 내용이었기 때문에 pass한다.간단 요약하면 .. 2024. 11. 5.