static 무엇인가?
static 무엇인가?
Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다.
이를 정확히 이해하기 위해서는 메모리 영역
에 대한 이해가 필요합니다.
- 일반적으로 우리가 만든 Class는
Static 영역
에 생성되고, new 연산을 통해 생성한 객체는Heap영역
에 생성됩니다. - 객체의 생성시에 할당된 Heap영역의 메모리는
Garbage Collector를 통해 수시로 관리
를 받습니다. - 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만,
- Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면
프로그램의 종료시까지 메모리가 할당
된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 됩니다. - 정적 멤버 (정적필드 - Static변수 / 정적메소드 - Static메소드 / 정적클래스 - Static 클래스)
정적(Static) 필드 사용 예시
1 | class Number{ |
정적(Static) 메서드 사용 예시
1 | class Name{ |
static변수 :
static변수는 클래스변수가 된다(클래스의 모든 객체가 공유
할 수 있게됨 : 일반적인 멤버변수는 하나의 객체 내에서만 전역 변수처럼 사용됨)
static변수는 클래스 객체의 생성 없이도 호출하여 사용할 수 있음 :
static 메소드:
- static메소드는 클래스메소드가 된다. 어느 객체의 내용에도 의존적이지 않은 하나의 작업을 수행하기 때문
- (일반적으로 main메소드가 static으로 선언됨 : public static void main(String[] args){} )
- static메소드가 포함 된 클래스를 부모로 상속받은 자식클래스는, 해당 static메소드(부모클래스의 메소드)를
오버라이딩을 통해 재정의 할 수 없음
(final메소드와 비슷하지만, static메소드는 메소드 숨김이 일어난다). - static메소드는 클래스메소드답게, 객체의 레퍼런스를 통한 call이 아닌
클래스의 이름으로 메소드
를 호출할 수 있음 (static변수와 유사)
static 클래스:
상속 불가
클래스를 의미.
cf) final ??
- final은 상속불가 또는 불변의 상수 선언에 사용됨
final 변수 :
- final로 선언된 변수는, 값의 초기화만 가능하고 그 값의 변경 및
새로운 할당이 불가능
한 상수가 됨(반드시 초기화 해 주어야함). - 일반적으로 final이 붙은 상수 변수는 static을 함게 붙여서 사용함.
- final 상수로 선언된 변수에 값을 넣어주면 error가 발생함.
final 메소드:
- final메소드가 포함 된 클래스를 부모로 상속받은 자식클래스는, 해당 final메소드(부모클래스의 메소드)를
오버라이딩을 통해 재정의 할 수 없음
(메소드가 불변성을 띄게 됨).
final 클래스:
상속 불가
클래스를 의미.- 클래스에 붙는 예약어로 final과 abstract은 함께 사용할 수 없음
- (abstract클래스 : abstract 메소드가 1개 이상인 클래스) : abstract는 추상클래스를 생성할 때 사용하므로 상속이 강제적이므로 상속 불가를 나타내는 final과는 쓸 수 없음.
Comment