전체 글669 자바 코드 리팩토링: 생성자 대신 팩토리 메서드, 전략 패턴/상태 패턴 적용, 상속 대신 위임, 에러 예외 처리 1. 생성자를 팩터리 메서드로 바꾸기 문제점 - new 키워드로 객체 생성시 클래스 이름이 노출됨 - 생성되는 클래스 이름을 숨기거나 상황에 맞게 인스턴스 생성이 가능하고자 할 때 - 컴파일 시간이 아닌 실행 시간에 생성되는 인스턴스가 결정되어야 할 때 리팩토링 방법 - 객체의 생성자를 private로 변경한다. - 외부로 열려 있는 static 메서드를 만들고 해당 메서드에서 객체를 생성하도록 한다. - 외부 호출시 new 키워드 사용을 막을 수 있다. Before 다음과 같은 Customer 클래스와 main 함수에서 이를 호출하는 케이스를 리팩토링 해보자. public class Customer { private int customerType; private String customerName; p.. 2023. 7. 7. 자바 코드 리팩토링: 매직넘버, 제어 플래그, 널 문제, 분류 코드 문제, 분기문 문제 1. 매직넘버를 상수로 바꾸기 문제점 - 의미를 알기 어렵다. - 100이라는 숫자를 쓴다고 해보자. 바뀌는 경우 어떻게 해야할까? 하나하나를 바꿔줘야 한다. -> 수정하기 어렵다. public void doSomething(int command){ if (command==0){ System.out.println("walk"); } else if (command == 1) { System.out.println("stop"); } else if (command ==2) { System.out.println("jump"); } } Robot robot = new Robot("K"); robot.doSomething(0); 로봇 객체가 doSomething 메서드를 수행하나고 할 때 명령어를 입력을 하는데 0.. 2023. 7. 6. 자바 디자인 패턴: 플라이웨이트, 프록시, 명령, 해석 패턴 1. 플라이웨이트 패턴 Flyweight Pattern 반복자 패턴이란? - 공유해서 쓰는 패턴 - 인스턴스가 구별되는 이유는 멤버 변수 값이 다르기 때문이다. - 규모가 작고 인스턴스마다 특성이 따로 없는 경우 공유해서 사용한다. 의도와 동기 - 매번 new를 하는 것이 아니라 효율성을 위해 낭비를 절감한다. - 예를 들어, 각 단어를 각각 표현하기보다는 문자를 공유하여 표현하면 비용이 훨씬적게 소요됨 - 각 객체가 부가적인 상태 (글꼴등...)이 있다면 따로 관리해야 하는 경우가 있음 - 작은 여러개의 객체를 관리해야 할때 주로 사용 -> 따로 관리해야 하는 것들이 많다면 이 패턴은 좋지 않다. 클래스 다이어그램 - Flyweight 각 객체가 사용할 인터페이스를 정의한다. - CocreteFl.. 2023. 7. 6. 자바 디자인 패턴: 반복자, 방문자, 연쇄책임 패턴 1. 반복자 패턴 Iterator Pattern 반복자 패턴이란? - 구조 안을 돌아다니며 처리하는 패턴 - 객체 요소들의 내부 표현방식을 공개하지 않고 외부에서 객체를 순회하는 객체를 만든다. - Java Collection Framework의 Iterator가 대표적이다. 의도와 동기 - 내부에서 객체의 순차적인 제공을 하지 않는 경우 - 순회 구현 방식이 다르더라도 동일한 방식(메서드)로 순회할 수 있게 제공한다. - 동일한 방식으로 순회하는 것이 핵심 클래스 다이어그램 집합 적인 객체가 있다고 했을 때, 이터레이터 인터페이스가 선언이 되어 있고 해당하는 구현체들이 그 집합체를 돌릴 수 있도록 구현한다. - Iterator: 요소에 접근하고 순회하는데 필요한 메서드 제공 - CocreteIter.. 2023. 7. 6. 자바 디자인 패턴: 상태 패턴, 옵저버 패턴, 메멘토 패턴, 파사드 패턴, 중재자 패턴 1. 상태 패턴 State Pattern 상태 패턴이란? - 상태가 달라지는 변화에 대응하는 패턴 - 클래스가 하나의 상태에 따라 그 내부의 여러 메서드의 기능이 바뀐다고 하면 이를 각각의 클래스로 분리한다. 의도와 동기 - 객체의 기능은 상태에 따라 달라질 수 있다. - 상태가 여러가지이고 클래스 전반의 모든 기능이 상태에 의존적이라 하면 상태를 클래스로 표현하는 것이 적절하다. - 많은 if-else 문을 방지하고 추후 상태 변화에 대응한다. 클래스 다이어그램 언제 어떤 클래스가 쓰일지를 적절하게 switch 해주는 것이 관건이다. - Context : ConcreteState의 인스턴스를 관리하고 서로 상태가 바뀌는 순간을 구현할 수 있다. - State : Context 가 사용할 메서드를 선.. 2023. 7. 6. 이전 1 ··· 47 48 49 50 51 52 53 ··· 134 다음