Static

공부하자·2023년 5월 31일
0

그녀를 붙Java

목록 보기
8/8

객체를 생성하지 않고 사용할 수 있는 필드와 메소드

항상 값이 변하지 않는 경우라면 static 사용시 메모리 할당을 딱 한번만 하게 되어 메모리의 이점을 얻을 수 있다.

static 으로 설정하면 같은 곳의 메모리 주소만을 바라보기 때문에 static 변수의 값을 공유하게 된다

인스턴스 필드 vs 정적 필드

-> 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언

-> 객체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언

인스턴스 메소드 vs 정적 메소드

-> 인스턴스 필드를 포함하고 있으면 인스턴스 메소드 선언

-> 인스턴스 필드를 포함하고 있지 않으면 정적 메소드 선언


static 메소드

메서드 앞에 static 키워드를 붙이면 객체 생성없이 클래스를 통해 메서드를 직접 호출할 수 있다.

스태틱 메서드 안에서는 객체변수 접근이 불가능 하다.

다른 변수가 static 변수이면 스태틱 메서드(static method)에서 접근이 가능하다.


정적 멤버 사용

클래스.필드;
클래스.메소드( 매개값, ... );


public class Calculator {
	static double pi = 3.14159;
	static int plus(int x, int y);
	static int minus(int x, int y);
}

	double result1 = 10 * 10 * Calculator.pi;
    int result2 = Calculator.plus(10, 5);
    int result3 = Calculator.minus(10, 5);
    

싱글톤 패턴 (singleton pattern)

싱글톤은 단 하나의 객체만을 생성하게 강제하는 패턴.

프로그램에 불필요한 객체가 여러개 생성되는 것을 방지.

싱글톤 패턴을 사용하는 이유

  • 공유 리소스에 대한 중복 생성을 방지하여 메모리를 절약

  • 하나의 인스턴스를 통해 데이터나 서비스에 대한 일관성을 유지

  • 전역 변수를 사용하지 않고도 객체 인스턴스에 접근 가능


public class Singleton {

	// 정적 필드
    private static Singleton instance;
	
     // private 생성자
    private Singleton() { }
    

    public static Singleton getInstance() {
        if (instance == null) {

            instance = new Singleton();
        }
        return instance;
    }
     
}

외부에서 객체를 얻는 유일한 방법은 getInstance( ) 메소드를 호출하는 것

클래스 변수1 = 클래스.getInstance( );
클래스 변수2 = 클래스.getInstance( );

// 컴파일 에러
Singleton obj1 = new Singleton();
Singleton obj2 = new Singleton();
------------------------------------
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();

-> obj1과 obj2는 같은 Singleton 객체

0개의 댓글