본문 바로가기
💾 Backend/자바

💞Static 정적 멤버💞

by 정람지 2023. 6. 10.

💞Static 멤버💞

클래스당 하나만 생성 (= 클래스 멤버라고도 함)

동일한 클래스의 모든 객체들이 공유함

main 메소드가 실행되기 전에 먼저 생성됨

프로그램이 종료될 때 사라짐

객체를 생성하지 않고도 사용할 수 있는 멤버

💞non - Static 멤버💞

객체가 생길 때 객체마다 생김( = 인스턴스 멤버라고도 함)

다른 객체들과 공유하지 않음

객체가 사라지면 같이 소멸


💞Static 멤버의 생성💞

1. 객체 생성 후 사용

정적멤버있는클래스 인스턴스 = new 정적멤버있는클래스();
인스턴스.static멤버; //로 사용
인스턴스.static메소드; //로 사용

일반 멤버 (non static 멤버, 인스턴스 멤버) 와 동일하게 사용 가능

 

2. 클래스명으로 바로

클래스이름.static멤버; //로 사용
클래스이름.static메소드; //로 사용

객체 생성 전에도 가능


💞Static 멤버의 활용💞

자바에서는 어떤 변수/함수도 클래스 바깥에 존재할 수 없으므로 (캡슐화원칙)

"전역 변수/함수"의 역할을 수행

 

ex) java.lang.Math 클래스의 모든 멤버 static

     +생성자private이므로 객체 생성 불가


💞Static 메소드의 제약조건💞

1. Static 멤버만 접근할 수 있다.

객체 없이도 존재하기 때문에 non-static 멤버들을 사용할 수 없다

(non-static 클래스는 static 멤버 사용 가능)

 

2. this 예약어 사용 불가

객체 없이도 존재하기 때문에 this를 사용할 수 없다.


+

실제 static 멤버의 생성 시점

= 일반적으로 "static 멤버가 포함한 클래스가 로딩될 때" 생성

메모리가 풍부한 컴퓨터에서 JVM은 처음부터 대부분의 클래스를 로딩하기 때문에 

일반적으로 'JVM이 시작되는 시점' 이라고도 할 수 있음.


static 변수/ static 메소드는 한번만 생성된다.

그렇다면 어떤 객체(클래스)가 한 번만 생성되려면??

싱글톤 사용!

 

💞싱글톤💞

객체가 오직 1개만 생성되는 패턴

인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용

 

- 외부에서 new 연산자로 생성자를 호출할 수 없도록 막기

=> private 생성자

 

- 클래스 자신의 타입으로 정적 필드 선언

=> private 접근제한자로 외부에서 접근 불가능하게 설정

 

- 외부 호출용 정적메소드 선언

=> 정적 필드에서 참조하고 있는 자신의 객체 리턴

public class 은채{ 
	private static 은채 oneInstance = null; // 클래스 자신의 타입으로 정적 필드 선언
    
    private 은채() { //외부에서 new 연산자로 생성자를 호출할 수 없도록 막기
    	System.out.println("세상에 유일한 은체 생성");
    }
    
    public static 은채 getInstance () { // 외부 호출용 정적메소드 선언
        if(instance == null) oneInstance = new 은체 (); //처음 한번만 생성
        return oneInstance;
    }
}

+

💞final 클래스💞

final class 파이널클래스{}

클래스를 상속받을 수 없음을 의미!

class 자식클래스 extends 파이널클래스{} //컴파일에러

💞final 메소드💞

final 반환자료형 파이널메소드(){}

자식클래스에서 오버라이딩 불가!


💞final 변수 == 상수 💞

final double 파이널자료형 = 3.1415926535897932;

상수가 된다! 

== final 필드


++

this()는 생성자에서 다른 생성자를 호출하는 문장

 

++

더 이상 참조되지 않는 객체를 가비지라고 함

 

++

클래스의 접근 지정자 : public / default

 default :동일한 패키지 내에 정의된 클래스에서만 인스턴스 생성 가능

 

멤버의 접근 지정자 : public / default / private / protected

default : 해당 패키지 내부에서만

private : 해당 클래스 내부만

protected :  해당 패키지 내부상속된 자식클래스들만

 

++

스택 메모리

함수의 호출과 관계되는 지역 변수와 매개변수가 저장

함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸

후입선출 : 가장 늦게 저장된 데이터가 가장 먼저 인출

 

힙 메모리 (new 생성자)

사용자가 직접 관리하는 메모리 영역

사용자에 의해 메모리 공간이 동적으로 할당/ 해제

'💾 Backend > 자바' 카테고리의 다른 글

💖자바 입출력💖  (0) 2023.06.30
💖자바 람다식💖  (0) 2023.06.27
💞모듈/패키지💞  (0) 2023.06.09
💖자바 내부 클래스💖  (1) 2023.06.02
💖자바 스트림💖  (1) 2023.06.02