[자바] 패턴을 통한 객체지향 언어의 이해

2021. 5. 26. 20:25·Archive/Java

 

1. 패턴(디자인 패턴)이란?

 

객체지향 언어의 장점을 모아 가장 효율적으로 개발을 할 수 있게, 유지보수를 효율적으로 할 수 있게 만들어놓은 프레임을 말한다.

 

 

2. 싱글톤 패턴(Singleton Pattern)이란?

 

싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다. 싱글턴 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 이 객체에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴이다.

 

 

# 싱글톤 예제

public class SingletonClass {
	private static SingletonClass SINGLETON_INSTANCE;
	private int i;
	private SingletonClass(){i = 10;}	//생성자함수가 private이므로 외부에서는 new를 이용해서 
// 생성못하고, 이 클래스 내부에서만 생성자함수 호출할 수 있다.
	public static SingletonClass getSingletonClass(){
		// 객체가 생성되기 전에 데이터영역의 클래스 상태에서 바로 접근가능한 메소드
		if(SINGLETON_INSTANCE==null)
			SINGLETON_INSTANCE = new SingletonClass();//객체생성을 이곳에서만 한다
		return SINGLETON_INSTANCE;
	}
	public int getI() {return i;}
	public void setI(int i) {this.i = i;}
}
public class FirstClass {
	public FirstClass(){
		SingletonClass singletonObject = SingletonClass.getSingletonClass();
		System.out.println("FirstClass 객체 ");
		System.out.println(singletonObject.getI());
		singletonObject.setI(999);
		System.out.println("i = "+singletonObject.getI());
	}
}
public class SecondClass {
	public SecondClass() {
		SingletonClass singletonObject = SingletonClass.getSingletonClass();
		System.out.println("SecondClass 객체 ");
		System.out.println(singletonObject.getI());
	}
}
public class MainClass {
	public static void main(String[] args) {
		FirstClass firstObj = new FirstClass();
		SecondClass secondObj = new SecondClass();
		SingletonClass singObj = SingletonClass.getSingletonClass();
		System.out.println("main()메소드에서 singleton객체");
		System.out.println(singObj.getI());
	}
}
public class SingletonClass {
	private static SingletonClass SINGLETON_INSTANCE;
	private int i;
	private SingletonClass(){i = 10;}	//생성자함수가 private이므로 외부에서는 new를 이용해서 
// 생성못하고, 이 클래스 내부에서만 생성자함수 호출할 수 있다.
	public static SingletonClass getSingletonClass(){
		// 객체가 생성되기 전에 데이터영역의 클래스 상태에서 바로 접근가능한 메소드
		if(SINGLETON_INSTANCE==null)
			SINGLETON_INSTANCE = new SingletonClass();//객체생성을 이곳에서만 한다
		return SINGLETON_INSTANCE;
	}
	public int getI() {return i;}
	public void setI(int i) {this.i = i;}
}
public class FirstClass {
	public FirstClass(){
		SingletonClass singletonObject = SingletonClass.getSingletonClass();
		System.out.println("FirstClass 객체 ");
		System.out.println(singletonObject.getI());
		singletonObject.setI(999);
		System.out.println("i = "+singletonObject.getI());
	}
}
public class SecondClass {
	public SecondClass() {
		SingletonClass singletonObject = SingletonClass.getSingletonClass();
		System.out.println("SecondClass 객체 ");
		System.out.println(singletonObject.getI());
	}
}
public class MainClass {
	public static void main(String[] args) {
		FirstClass firstObj = new FirstClass();
		SecondClass secondObj = new SecondClass();
		SingletonClass singObj = SingletonClass.getSingletonClass();
		System.out.println("main()메소드에서 singleton객체");
		System.out.println(singObj.getI());
	}
}

'Archive > Java' 카테고리의 다른 글

[자바] 예외(Exception) 처리  (0) 2021.05.26
[자바] API(Application Programming Interface)  (0) 2021.05.26
[자바] 인터페이스 interface  (0) 2021.05.21
[자바] 추상 클래스 abstract class  (0) 2021.05.21
[자바] 상속 inheritance  (0) 2021.05.21
'Archive/Java' 카테고리의 다른 글
  • [자바] 예외(Exception) 처리
  • [자바] API(Application Programming Interface)
  • [자바] 인터페이스 interface
  • [자바] 추상 클래스 abstract class
J. Son
J. Son
Petit à petit l'oiseau fait son nid.
  • J. Son
    Steady Study Log
    J. Son
  • 전체
    오늘
    어제
    • 분류 전체보기 (172) N
      • Python & SQL (63)
        • Python Basics (21)
        • Python Problems (23)
        • Python Practice (11)
        • MySQL (1)
        • Git & GitHub (7)
      • ML & DL (7) N
      • Projects (6) N
        • Project Portfolio (6) N
      • AI Camp (4)
        • Camp Reflection (4)
      • Concept Notes (6)
        • Statistics & Stata (4)
        • Mathematics (2)
      • Archive (85) N
        • Java (24)
        • R (1)
        • Languages (49)
        • Miscellaneous (11) N
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • GitHub
    • WikiDocs
  • 공지사항

  • 인기 글

  • 태그

    점프투파이썬 연습문제 풀이
    자바
    복합과거
    어린왕자 불어
    python problem
    share.streamlit.io
    프랑스어 공부
    파이썬 streamlit
    Le Petit Prince
    파이썬 크롤링
    불어 관계대명사
    어린왕자 프랑스어
    Stata
    MySQL
    python streamlit
    GIT
    passe compose
    파이썬
    맥 git
    프로젝트 오일러
    불어 공부
    machine learning
    Python
    객체
    점프투파이썬 연습문제
    Github
    streamlit
    파이썬 문제
    초보자를 위한 파이썬 300제
    머신러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
J. Son
[자바] 패턴을 통한 객체지향 언어의 이해
상단으로

티스토리툴바