전체 글
-
[디자인 패턴] 이터레이터 패턴 (Iterator Pattern)Computer Science/Design Pattern 2022. 12. 14. 00:55
이터레이터 패턴이란? : 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴 - 컬렉션 구현을 노출시키지 않으면서도 그 안에 있는 모든 항목에 접근할 수 있게 함 - 집합체 내에서 어떤 식으로 일이 처리되는지 몰라도 안에 있는 항목에 대해 반복작업 수행 가능 [ 장점 ] - 집합체 클래스의 응집도 증가 - 모든 항목에 일일이 접근하는 작업을 이터레이터 객체에서 진행함으로써, 집합체에서는 반복 작업이 아닌 원래 자신의 역할에 전념할 수 있음 [ 단점 ] - 단순 순회만을 구현할 경우 클래스만 많아져 복잡도가 증가함 참조: [Design Pattern] 이터레이터 패턴 (iterator pattern)
-
[디자인 패턴] 프록시 패턴 (Proxy Pattern)Computer Science/Design Pattern 2022. 12. 13. 17:24
프록시 패턴이란? : 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴 - 이를 통해 객체의 속성, 변환 등을 보완 - 보안, 데이터 검증, 캐싱, 로깅에 사용 - 흐름제어만 할 뿐 결과값을 조작하거나 변경하지 않음 [ 종류 ] 1. Virtual Proxy : 주체 클래스가 리소스 집약적인 경우 - 해상도가 높은 이미지를 처리해야 할 경우, 인스턴스화시 많은 메모리를 사용하게 됨. - 프록시 클래스에서 자잘한 작업을 처리하고 리소스가 많이 요구되는 작업이 필요할 때만 주체 클래스를 사용하도록 구현 2. Protection Proxy : 주체 클래스에 대한 접근을 제어하기 위한 경우 - 프록시 클래스에서 클라이언트가 주체 클래스에 대해 접근을 허..
-
[디자인 패턴] 옵저버 패턴 (Observer Pattern)Computer Science/Design Pattern 2022. 12. 13. 16:51
옵저버 패턴이란? : 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴 - 주체: 객체의 상태 변화를 보고 있는 관찰자 - 옵저버: 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체 - 한 객체의 상태 변화에 따라 다른 객체 상태도 연동되도록 1:N 의존 관계를 구성 - Java는 기본적으로 옵저버 패턴을 적용한 Observer 인터페이스, Observable 클래스를 제공 (Observable은 상속을 해야하기 때문에 다른 상속을 함께 사용할 수 없는 단점 존재) [ 구현 방법 ] interface Subject { public void register(Observer..
-
[디자인 패턴] 전략 패턴 (Strategy Pattern)Computer Science/Design Pattern 2022. 12. 13. 14:09
전략패턴이란? : 실행 중에 알고리즘을 선택할 수 있게 하는 행위(Behavioral) 소프트웨어 디자인 패턴 - 특정한 계열의 알고리즘을 정의하고 각각 캡슐화하며 해당 계열내에서 상호 교체가 가능하게 함 - 어떤 동작을 하는 로직을 정의하고, 이것을 캡슐화하여 관리하는 패턴 (ex. 결제할 때 네이버페이, 카카오페이 등 '전략'만 바꿔서 결제가 가능하게 함) - 독립적으로 알고리즘을 다양하게 변경할 수 있으며 기능 추가, 로직 변경시 유연하게 확장 가능 - 어떤 전략을 사용할지 외부에서 데이터 입력이 필요 - 클래스를 수정하지 않고도 기능을 추가하거나 변경할 수 있음 [ 구현 방법 ] // 결제 전략 인터페이스 interface PaymentStartegy { public void pay(int amo..
-
[디자인 패턴] 팩토리 패턴 (factory pattern)Computer Science/Design Pattern 2022. 12. 13. 00:09
팩토리패턴이란? : 객체 생성 처리를 하위 클래스로 분리해 처리하도록 캡슐화하는 패턴 - 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화 - 상속 관계에 있는 두 클래스에서 상위클래스는 중요한 뼈대를 결정하고 하위클래스는 객체 생성에 관한 구체적인 내용을 결정 - 상위 클래스에서는 인스턴스 생성 방식에 대해 관여하지 않기 때문에 더 많은 유연성을 가짐 - 객체 생성로직이 따로 있기 때문에 코드 리팩토링에 있어서 편의성 증가 [ 구현 방법 ] abstract class Coffee { public abstract int getPrice(); @Override public String toString() { return "This coffee is " + this.getPrice(); } } cla..
-
[디자인 패턴] 싱글톤 패턴(Singleton Pattern)Computer Science/Design Pattern 2022. 12. 12. 23:41
싱글톤패턴이란? : 단 '하나'의 인스턴스만 생성하여 사용하는 디자인패턴 - 애플리케이션에 시작될 때, 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 지속 사용 - 생성자가 여러번 호출되더라도, 객체는 최초 호출시에만 한 번 생성되며 이후 호출부터는 이미 생성한 객체를 반환 [ 구현 방법 ] public class Singleton { // 1. static 영역에 객체를 1개만 생성 private static final Singleton instance = new Singleton(); // 2. public으로 인스턴스가 필요할 경우 static 메서드를 통해 조회만 가능하도록 허용 public static Singleton getInstance() { return inst..
-
[뷰 Vue.js] Computed 속성과 WatchersProgramming/Vue.js 2022. 11. 7. 13:54
Computed Properties - Computed Properties(계산된 속성)은 탬플릿의 데이터 표현을 좀 더 직관적이고 간결하게 쓰도록 도와줌 - 복잡한 로직이나 반복해야하는 코드들을 computed property로 만들 수 있음 [ Computed Properties를 사용하지 않았을 경우 ] - 아래와 같이 코드를 작성하면, 한 번에 message가 어떻게 표시될지 알 수 없고, 해당 코드를 여러 곳에 적용시켜야 할 때 복잡성이 증가하게 됨 {{ message.split('').reverse().join('') }} [ Computed Properties 사용시 ] - 아래와 같이 작성함으로써 코드의 재사용성과 가독성을 높일 수 있다. Original message: "{{ messag..
-
[뷰 Vue.js] 이벤트 핸들링 (Event Handling)Programming/Vue.js 2022. 11. 3. 15:16
Listening to Events - v-on 디렉티브를 이용하여 DOM 이벤트를 듣고 반응하여 JavaScript를 실행 Add 1 {{ counter }} Methods Event Handlers - 이벤트 핸들러 뒤에 JavaScript 코드들을 작성하는 것은 복잡성을 높여 좋지 않음 - method로 빼고 v-on 뒤에는 메소드의 이름만 작성함으로써 메소드를 호출할 수 있음 Greeting Methods in Inline Handlers - 메소드 이름을 직접 바인딩하는 대신 인라인 JS 구문에 메소드 사용 가능 say hi say what - 원본 DOM 이벤트에 엑세스하고 싶을 때는 $event 변수를 사용해 메소드에 전달할 수 있음 say hi say hello Event Modifiers..