JAVA 주요 디자인 패턴

O0·2022년 6월 10일
0

JAVA

목록 보기
2/4
post-thumbnail

디자인 패턴

  • 객체지향 프로그래밍 설계 시 자주 발생하는 문제들을 파악하기 위해 사용하는 패턴
  • 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계방법을 정리한 코딩 방법론


1) 싱글톤

  • 객체의 인스턴스가 오직 1개만 생성되는 패턴(메모리 이점)
  • 장점 : 한 개의 객체만 생성하기 때문에 메모리 이점이 있다.
  • 단점 : 다른 객체간의 결함도가 높아져서 객체지향 설계 원칙에 어긋난다.
public class SingletonClass {
	private static SingletonClass sc = null;
	public int num;
	
	private SingletonClass() {
		
	}
	
	public static SingletonClass getInstance() {
		if(sc == null) {
			sc = new SingletonClass();
		}
		return sc;
	}

}

2) 팩토리 메소드 패턴

  • 객체 생성을 대신 수행해주는 공장
  • 장점 : 생성 할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성 담당
  • 단점 : 불필요한 많은 클래스 생성 가능성
package factory;

import animal.Animal;
import animal.Cat;
import animal.Cow;
import animal.Dog;

public class AnimalFactory {
	
	public static Animal create(String animalName) {
		
		if(animalName.equals("")) {
			System.out.println("생성할 클래스가 없습니다.");
		}
		else if(animalName.equals("야옹이")) {
			return new Cat();
		}
		else if(animalName.equals("멍멍이")) {
			return new Dog();
		}
		else if(animalName.equals("황소")) {
			return new Cow();
		}
		
		return null;
		
	}

}

3) 옵저버 패턴

  • 어떤 객체가 상태가 변할 때 관련있는 객체에게 알림을 보내는 패턴
  • 장점 : 실시간으로 한 객체의 변경사항을 알 수 있다.
  • 단점 : 데이터 배분에 문제가 생기면 큰 문제가 일어난다.

ObserverA.java

 
package observe;

import java.util.Observable;
import java.util.Observer;

public class ObserverA implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		String str = (String)arg;
		System.out.println("변경 통지를 받음 : " + str);
	}
	
	

}

Myclass.java

package cls;

import java.util.Observable;

public class Myclass extends Observable{
	private String password;

	private String perArg = null;
	
	//일반 메소드
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getPassword() {
		return password;
	}

	@Override
	public void notifyObservers(Object arg) {
		// TODO Auto-generated method stub
		String str = (String)arg;
		
		//변화가없다
		if(str.equals(perArg)) return;
		
		perArg = str;
		
		setChanged(); //reset;
		
		super.notifyObservers(arg);
		clearChanged();
	}
	
	
}
profile
O0

0개의 댓글