Java
-
행동(Behavioral) - 관찰자(Observer) 패턴Java/디자인패턴 2024. 11. 14. 09:24
관찰자(Observer) 패턴은 행동(Behavioral) 디자인 패턴에 속합니다. 이 패턴은 객체 간의 일대다(one-to-many) 의존 관계를 정의하여, 한 객체의 상태 변화가 있을 때 이를 의존하고 있는 다른 객체들이 자동으로 통보 받고 업데이트되도록 설계합니다. 일반적으로, 이러한 관계는 "발행-구독(Publish-Subscribe)" 메커니즘을 사용하여 구현됩니다.Observer 패턴 개념 설명주체(Subject): 상태를 갖고 있으며, 상태가 변경되면 관찰자들에게 알리는 객체입니다.관찰자(Observer): 주체의 상태 변화에 반응하는 객체입니다. 주체에 등록된 여러 관찰자들은 주체가 변경될 때마다 업데이트를 받습니다.활용 예:GUI 이벤트 시스템: 버튼 클릭이나 스크롤 동작 등 UI 상의 ..
-
구조패턴 - 프록시(Proxy) 패턴Java/디자인패턴 2024. 11. 13. 09:22
프록시(Proxy) 패턴은 **구조 패턴(Structural Pattern)**에 속하는 디자인 패턴입니다. 프록시 패턴은 실제 객체에 대한 대리인(Proxy) 역할을 수행하는 객체를 제공하여, 원래 객체에 대한 접근을 제어하거나 추가적인 기능을 수행할 수 있도록 합니다. 주로 원래 객체에 접근하는 과정에서 제약을 두거나, 접근 전에 특정 작업을 수행해야 할 때 사용됩니다.프록시 패턴의 목적접근 제어: 원래 객체에 접근하기 전 또는 접근을 제한해야 할 때 사용됩니다. 예를 들어, 데이터베이스 연결, 원격 서버 연결, 파일 입출력 등 무거운 작업에 대해 프록시 객체가 중간에서 접근을 제어할 수 있습니다.지연 초기화(Lazy Initialization): 실제 객체의 초기화가 비용이 큰 경우, 처음에는 프록..
-
JAVA - 다형성, 추상메서드, 인터페이스 사용하는 이유Java/JAVA17 2024. 11. 12. 23:24
다형성과 오버라이드(Override)다형성(Polymorphism)은 상위 클래스 타입으로 하위 클래스 객체를 참조하여, 같은 메서드 호출이지만 하위 클래스의 구현에 따라 다르게 동작하도록 하는 객체지향의 특징입니다. 다형성을 구현하기 위해 자바에서는 메서드 오버라이드를 사용합니다.다형성에서의 문제점: 오버라이드 누락다형성 구현 시, 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의해야 하는데, 이 재정의(오버라이드)를 빼먹을 가능성이 있습니다.이를 방지하기 위해, 부모 클래스에서 반드시 구현해야 할 메서드는 추상 메서드로 선언하고, 이를 포함한 부모 클래스는 추상 클래스로 정의하여 자식 클래스에서 오버라이딩을 강제합니다.추상 클래스와 순수 추상 클래스추상 클래스(Abstract Class): 하나..
-
JAVA - 다형성 OverrideJava/JAVA17 2024. 11. 12. 10:49
업캐스팅과 다운캐스팅은 **오버라이드(Override)**와 함께 자주 사용됩니다. 오버라이딩은 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것이며, 이를 통해 다형성(Polymorphism)을 구현할 수 있습니다. 업캐스팅을 통해 상위 클래스 타입으로 객체를 참조할 때, 오버라이드된 하위 클래스의 메서드가 호출됩니다. 다운캐스팅은 하위 클래스에만 있는 메서드나 필드에 접근하기 위해 사용됩니다. 예시 코드class Animal { void sound() { System.out.println("Animal makes a sound"); }}class Dog extends Animal { @Override void sound() { System.out.pr..
-
생성패턴 - 팩토리 메소드(Factory Method) 패턴Java/디자인패턴 2024. 11. 12. 10:06
팩토리 메소드(Factory Method) 패턴은 **생성 패턴(Creational Pattern)**에 속하는 디자인 패턴입니다. 이 패턴은 객체의 생성 방식을 서브클래스에서 결정하도록 하여 객체 생성 시 객체의 구체적인 클래스를 지정하지 않고도 객체를 생성할 수 있게 해줍니다. 즉, 객체 생성을 캡슐화하여 생성 로직을 서브클래스에서 정의할 수 있도록 합니다.팩토리 메소드 패턴의 목적특정 클래스의 인스턴스를 생성하는 책임을 서브클래스에게 위임하여, 상위 클래스에서 객체를 생성하는 방법과 관련된 결정을 서브클래스에서 정의하도록 합니다.객체를 생성할 때 클라이언트 코드가 구체적인 클래스에 의존하지 않도록 하여, 코드의 유연성과 확장성을 높입니다.팩토리 메소드 패턴의 구조Product (제품 인터페이스): ..
-
JAVA - 다형성 (업케스팅, 다운케스팅, instanceof)Java/JAVA17 2024. 11. 12. 09:57
자바에서 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)은 객체지향 프로그래밍에서 객체의 타입을 변환하는 과정입니다.업캐스팅 (Upcasting)업캐스팅은 하위 클래스 객체를 상위 클래스 타입으로 변환하는 것입니다. 자바에서는 업캐스팅이 자동으로 수행되며, 상위 클래스 타입의 변수에 하위 클래스 객체를 할당할 때 이루어집니다. 업캐스팅을 통해 상위 클래스에서 정의된 메서드만 접근할 수 있습니다. 예시코드:class Animal { void sound() { System.out.println("Animal makes a sound"); }}class Dog extends Animal { void sound() { System.out.println..
-
구조 패턴- 브릿지(Bridge) 패턴Java/디자인패턴 2024. 11. 11. 09:17
브릿지(Bridge) 패턴은 구조 패턴(Structural Pattern) 중 하나로, 구현부와 추상화된 인터페이스를 분리하여 서로 독립적으로 확장할 수 있도록 설계하는 패턴입니다. 이는 하나의 인터페이스에 다양한 구현을 적용할 수 있게 하여 코드의 유연성을 높이는 데 목적이 있습니다. 즉, 두 부분을 연결하는 ‘다리’를 놓아 서로 독립적인 수정과 확장을 가능하게 합니다.1. 브릿지 패턴의 목적브릿지 패턴은 코드의 결합도를 낮추고, 기능과 구현을 독립적으로 확장할 수 있도록 도와줍니다. 특히, 클래스 계층이 복잡해지거나 다양한 기능의 조합이 필요할 때 유용합니다.2. 브릿지 패턴의 구성 요소추상화(Abstraction): 클라이언트가 사용하는 최상위 인터페이스나 추상 클래스입니다. 이 클래스는 구현부(I..
-
구조 패턴 - 어댑터(Adapter) 패턴Java/디자인패턴 2024. 11. 10. 21:15
어댑터(Adapter) 패턴은 주로 **구조 패턴(Structural Pattern)**으로 분류되며, 서로 호환되지 않는 인터페이스를 가진 클래스들 사이에서 호환성을 제공하는 패턴입니다. 즉, 클라이언트가 원하는 인터페이스와 실제 사용하려는 객체의 인터페이스가 다를 때, 그 둘을 중개해주는 역할을 합니다. 이 패턴을 통해 기존 코드를 수정하지 않고 새로운 인터페이스를 추가할 수 있어 재사용성과 유연성을 높이는 데 도움이 됩니다.1. 어댑터 패턴의 목적어댑터 패턴의 주된 목적은 호환되지 않는 인터페이스를 가진 클래스들을 함께 사용할 수 있게 하는 것입니다. 이를 통해 기존 코드의 수정 없이 필요한 인터페이스를 구현하여 재사용할 수 있습니다.2. 어댑터 패턴의 구성 요소클라이언트(Client): 어댑터 패..