프로그래밍 언어 활용 _ Java

Hvvany·2023년 9월 24일
0

Java

목록 보기
7/7

static / no static

  • static - class method
  • no static - instance method
class Print{
	public String delimiter;
	public void a() {
		System.out.println(delimiter);
		System.out.println("a");
		System.out.println("a");
	}
	public void b() {
		System.out.println(delimiter);
		System.out.println("b");
		System.out.println("b");
	}
	public static void c(String delimiter) {
		System.out.println(delimiter);
		System.out.println("c");
		System.out.println("c");
	}
}

public class static_no_static {
	public static void main(String[] args) {
		Print.c("&");
		
		Print t1 = new Print();
		t1.delimiter = "-";
		t1.a();
		t1.b();
	}
}

&
c
c
-
a
a
-
b
b

  • Print 클래스의 인스턴스인 t1
  • static 인 c 메서드는 클래스 메서드
  • no static 인 a, b 메서드는 인스턴스 메서드

싱글톤 패턴

public class Singleton {
	static private Singleton instance = null;
	private int count = 0;
	static public Singleton get() {
		if(instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
	public void count() {count ++;}
	public int getCount() {return count;}
}

public class Singleton2{
	public static void main(String[] args) {
		Singleton s1 = Singleton.get();
		s1.count();
		Singleton s2 = Singleton.get();
		s2.count();
		Singleton s3 = Singleton.get();
		s3.count();
		System.out.print(s1.getCount());
	}
}

3

  • instance 변수는 static 변수이므로 프로그램이 시작되면 변수가 생성되고 종료되면 소멸된다.
  • get 함수는 static 메서드이므로 Singleton s = new Singleton(); 과 같은 인스턴스 생성 없이 외부 클래스에서 호출할 수 있다.
  • get 함수 호출 시 instance가 null이면 new 를 통해 instance변수에 Singleton객체를 저장하고 instance 변수를 return한다.
  • get 함수 호출 시 instance가 not null 이면 이전에 생성한 static인 instance변수를 가져와 변수 안에 들어있는 Singleton객체를 반환한다.
  • 결국 s1, s2, s3는 이름이 다르지만 같은 s1 인스턴스(객체)이므로 메서드 호출 시 같은 인스턴스의 메서드가 실행되어 s1 인스턴스(객체)의 멤버 변수 count의 숫자가 1씩 계속 커진다. 그 결과 3이 출력된다.

참고

Singleton 클래스가 붕어빵 틀 -> 클래스

t1이 위의 틀로 만들어낸 붕어빵 1번 -> 인스턴스(객체)
t2라는 이름으로 하나 더 찍어내면 붕어빵 2번 -> 인스턴스(객체)

붕어빵 1번과 2번은 모양은 같으나 서로 다른 녀석(객체)이다.

Singleton 클래스(형태)의 인스턴스(객체)는? t1, t2

profile
Just Do It

0개의 댓글