Java - 정적 멤버 & static [IT 국비지원/구디 아카데미/김지훈 강사님]

hooon__dii·2023년 8월 30일
0

Java

목록 보기
10/11
post-thumbnail

정적멤버(static member)

정적 멤버는 클래스에 고정된 멤버로 객체를 생성하지 않고 바로 사용할 수 있는 필드와 메소드를 의미한다.

  • 객체(인스턴스)에 속한 멤버가 아니고 클래스에 속한 멤버이기 때문에 클래스 멤버라고도 불린다.

static 영역은 클래스의 원본이 자리잡은 곳.
member에게 static 키워드를 붙이면 static 영역에 저장이 된다.

선언 방법

public class Example{
	// 정적 필드
    static int val;
    // 정적 메서드
    static String exMethod(){
    	(...)
    }

}

객체(인스턴스)마다 가지고 있어야할 데이터 / 메서드 = 인스턴스 필드 / 메서드
객체(인스턴스)들이 공통으로 가지고 있는 데이터 / 메서드 = 정적 필드 / 메서드

저장영역이 다를때 호출방법

public class Inner {
	
	public static void main(String[] args) {	// static 이므로 원본영역
		// 같은 클래스에서 영역이 같으면 그냥 호출 가능
		st_msg("hello static member");	// st_msg -> static 영역
		
		// 같은 클래스라 하더라도 static 영역에서 일반영역에 있는 member를 호출 할때 생성자를 호출한뒤 사용
		Inner inner = new Inner();
		inner.h_msg("Hello Java");	// h_msg -> heap영역
	}
	
	static void st_msg(String msg) {
		System.out.println("static 멤버 메세지 : "+msg);
	}
	
	void h_msg(String msg) {
		System.out.println("일반 영역 메세지 : "+msg );
		// 일반 메서드에서 static메서드를 호출할때?
		Inner.st_msg(msg+" from heap");	// 클래스에 직접 접근하여 메서드 호출
	}
}

final keyword

final키워드는 변수, 메서드, 클래스에 사용된다. 이 중 어디에 사용되냐에 따라 다른 의미를 가지고 있지만 공통적으로 무언가를 제한 한다는 의미를 가지고있다.

  • final은 한번 지정되면 프로그램 종료시 까지 변경이 불가능하다
  • 생성자에 의해서만 초기화가 가능하다

static final

static final의경우 객체화 초기화가 되지 않아 불변의 값으로 간주한다.
이것을 상수(Contant)라고 하며 모두 대문자로 표기한다.

예제 )

public class Person {

	final String nation;
	final String name;
	// 상수는 전체 대문자로 표기한다 ( tip : ctrl + shift + x (전체 대문자 단축키 )
	static final String SSN = "230811-1234567";
	
	/*
	 * final은 초기화를 해줘야만 한다 
	 * 필드 기본값을 주지 않으면 생성자에서라도 무조건 초기화를 해주어야함
	 */
	
	public Person(String nation, String name) {
		this.nation = nation;
		this.name = name;
	}
}


public class Main {
	
	 public static void main(String[] args) {
		 Person person = new Person("KOREA", "김이박");
		 
		 // final은 한번 초기화 되면 바꾸지 못한다.
//		 person.name = "KimLeePark";
		 
		 System.out.println(person.nation);
		 System.out.println(person.name);
		 System.out.println(Person.SSN);
		 
	}
}

내 머리는 final static인가 .. ?
it국비지원 / 구디아카데미 / 김지훈강사님

0개의 댓글