Static
2021. 1. 5. 15:28ㆍ2021/JOB DA STUDY
Static
어떤 값이 메모리에 한번 할당되어 프로그램이 끝날 때까지 그 메모리에 값이 유지됨을 의미하므로, 특정 값을 공유해야하는 경우에는 static사용시 메모리의 이점을 얻을 수 있다.
Static 변수
인스턴스 변수는 클래스가 생성될때 메모리 공간이 할당되고, 생성자에 있는 값으로 초기화된다.
하지만 static 변수(클래스 변수)는 선언되는 순간에 하나의 메모리 공간이 할당되기 때문에 어디에 선언이 되더라도 그 클래스 내에서는 공유 된다.
인스턴스 변수를 사용하면 instance1, instance2 객체 생성시, instance1의 variable과 instance2의 variable이 서로 다른 메모리를 각각 할당받게 된다.
그러나 static 변수를 사용하게 되면, 두 객체를 생성하여도 variable은 하나의 메모리만 할당받게 된다.
Static 메서드
static메서드는 객체를 생성하지 않아도 호출이 가능하지만,
객체에서는 호출이 불가능하며 static메서드 안에서는 인스턴스 변수의 접근이 불가능하다.
Static 메소드, Static 변수 이용 | 인스턴스 변수 생성 |
public class Practice{ static int count; public Practice(){ this.count ++; System.out.println("횟수:" + this.count); } pulic static int getCount(){ return count; } public static void main(String[] args){ practice hc1 = new Practice(); practice hc2 = new Practice(); System.out.println("static 메소드: " + Practice.getCount()); } } |
public class Practice{ int count; public Practice(){ this.count ++; System.out.println("횟수:" + this.count); } public static void main(String[] args){ practice hc1 = new Practice(); practice hc2 = new Practice(); } } |
횟수:1 횟수:2 static 메소드: 2 |
횟수:1 횟수:2 |
- 인스턴스에서 공통적으로 사용해야 하는 것에 Static을 붙인다. 인스턴스를 생성하면 각 인스턴스는 서로 다른 메모리들의 주소를 할당받기 때문에 서로 다른 값을 유지한다.
하지만 인스턴스들이 공통적인 값을 유지해야 하는 경우에는 Static을 붙인다.
- 전역으로 자주 사용할 메서드를 Static메서드로 만들어 사용한다. 프로젝트 내에서 공통적으로 사용해야하는 메소드가 있는 경우에는 Static메소드로 만들어서 불필요한 코드의 수를 줄 인다. 이때, 인스턴스 변수가 메서드 내부에서도 필요한가에 대해 고려해야한다.
-----------------------------------------------------------------------------------------------------------------------static 멤버 변수
- 클래스 변수라고도 한다.
- 모든 해당 클래스는 같은 메모리를 공유한다.
- 특정 인스턴스에 종속되지 않는다.
- 인스턴스를 만들지 않고 사용 가능하다.
Static 메소드
- 클래스 메소드라고도 부흔다.
- 오버라이드 불가능 하다.
- 상속 클래스에서 보이지 않는다.
Static 블록
- 클래스 내부에 만들 수 있는 초기화 블록
- 클래스가 초기화 될 때 실행되고, main()보다 먼저 수행된다.
Static 클래스
- 일반적인 클래스(top-level)클래스에 적용하면 문법 오류이다. (top-level 클래스가 static하지 않다는 뜻은 아니다.)
- 중첩 클래스(nested class)에만 사용 할 수 있다. ( <-> inner class에서는 static으로 정으되지 않는다.)
- 부모 클래스의 멤버 필드 중에서는 static필드만 접근할 수 있다.
- 사실상 일반적인 top-level 클래스와 동일하게 동작하지만, 그 위치가 하나의 top-level 클래스안에 들어있는 것이다.
static import
다른 클래스에 존재하는 static 멤버들을 불러올 때 사용한다.
'2021 > JOB DA STUDY' 카테고리의 다른 글
디자인패턴_Singleton Pattern of Creational Pattern (0) | 2021.01.05 |
---|---|
Final (0) | 2021.01.05 |
Design Pattern (0) | 2021.01.05 |
디자인패턴_MVC Pattern (0) | 2020.12.31 |
NoClassDefFoundError 와 ClassNotFoundException (0) | 2020.12.29 |