728x90
static → 정적
- 클래스의 인스턴스가 아니라 클래스에 속하며 클래스의 변수, 메소드 등을 공유하는데 사용된다.
- 이를 통해 해당 클래스에서 만들어지는 객체 사이에서 중복되는 메소드, 속성을 효율적으로 정의할 때 쓰인다.
- static으로 선언해서 명시적으로 이 클래스의 객체들 사이에서 사용되는 메소드, 속성이라는 것을 알려줄 수 있다는 장점이 있다.
static 변수
- static 변수 = 정적 변수 = 클래스 변수
- 한 클래스에서 사용하는 공용 변수 느낌
- static 변수는 메소드 영역에서 관리된다.
멤버 변수(필드)의 종류
public class Data3 {
public String name; // 인스턴스 변수
public static int count; //static 변수
}
- static 변수 → 인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능
- 인스턴스 변수 → 인스턴스를 생성해야 사용 가능
- static 변수는 하나만 존재하지만, 인스턴스 변수는 인스턴스 개수만큼 존재한다.
변수와 생명 주기
지역 변수(매개 변수 포함) 인스턴스 변수 클래스 변수
위치 | 스택 영역의 스택 프레임 안에 보관 | 인스턴스에 있는 멤버 변수, 힙 영역 사용 | 메소드 영역의 static 영역에 보관 |
제거 시점 | 메소드 종료 시 제거 | GC 발생 시 제거 | 해당 클래스가 JVM에 로딩되는 순간 생성, JVM이 종료될 때 제거 |
생명 주기 | 생명 주기 짧음 | 생명 주기 보통 | 생명 주기 김 |
static 메소드
- 정적 메소드는 정적 변수처럼 인스턴스 생성 없이, 호출할 수 있는 메소드다.
- 클래스명 + . 을 통해 메소드를 호출할 수 있다.
- 불필요한 객체 생성 필요 없이 메소드를 호출할 수 있다.
- 정적 메소드는 static만 사용할 수 있다.
- 클래스 내부 기능을 사용할 때, static이 붙은 멤버 변수나 메소드만 사용할 수 있다.
- 클래스 내부 기능을 사용할 때, 인스턴스 변수나 인스턴스 메소드는 사용할 수 없다.
- 접근 제어자만 허락한다면 모든 곳에서 정적 메소드를 호출할 수 있다. → 정적 메소드는 공용이니까
메소드의 종류
- 정적 메소드
- 인스턴스 메소드
- 멤버 변수(필드)와 마찬가지다.
static 변수/메소드의 단점
- static 키워드로 선언되지 않은 변수는 heap에 할당된다.
- heap에서는 GC가 메모리를 관리하고, 더 이상 필요하지 않는 메모리는 회수한다.
- static 키워드로 선언된 변수, 메소드는 선언과 동시에 heap 영역이 아니라 메소드 영역의 static 영역에 보관된다.
- 프로그램이 종료될 때까지 GC에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비가 발생한다.
- 그리고 JVM이 종료될 때까지 제거되지 않으므로 메모리 낭비가 발생할 수 있다.
728x90
'CS > 그외' 카테고리의 다른 글
라이브러리 vs 프레임워크 (1) | 2024.07.16 |
---|---|
오버로딩과 오버라이딩 (0) | 2024.07.12 |
클래스, 객체, 인스턴스의 차이가 뭔가요? (0) | 2024.07.10 |
동기, 비동기 (0) | 2024.04.29 |
728x90
static → 정적
- 클래스의 인스턴스가 아니라 클래스에 속하며 클래스의 변수, 메소드 등을 공유하는데 사용된다.
- 이를 통해 해당 클래스에서 만들어지는 객체 사이에서 중복되는 메소드, 속성을 효율적으로 정의할 때 쓰인다.
- static으로 선언해서 명시적으로 이 클래스의 객체들 사이에서 사용되는 메소드, 속성이라는 것을 알려줄 수 있다는 장점이 있다.
static 변수
- static 변수 = 정적 변수 = 클래스 변수
- 한 클래스에서 사용하는 공용 변수 느낌
- static 변수는 메소드 영역에서 관리된다.
멤버 변수(필드)의 종류
public class Data3 {
public String name; // 인스턴스 변수
public static int count; //static 변수
}
- static 변수 → 인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능
- 인스턴스 변수 → 인스턴스를 생성해야 사용 가능
- static 변수는 하나만 존재하지만, 인스턴스 변수는 인스턴스 개수만큼 존재한다.
변수와 생명 주기
지역 변수(매개 변수 포함) 인스턴스 변수 클래스 변수
위치 | 스택 영역의 스택 프레임 안에 보관 | 인스턴스에 있는 멤버 변수, 힙 영역 사용 | 메소드 영역의 static 영역에 보관 |
제거 시점 | 메소드 종료 시 제거 | GC 발생 시 제거 | 해당 클래스가 JVM에 로딩되는 순간 생성, JVM이 종료될 때 제거 |
생명 주기 | 생명 주기 짧음 | 생명 주기 보통 | 생명 주기 김 |
static 메소드
- 정적 메소드는 정적 변수처럼 인스턴스 생성 없이, 호출할 수 있는 메소드다.
- 클래스명 + . 을 통해 메소드를 호출할 수 있다.
- 불필요한 객체 생성 필요 없이 메소드를 호출할 수 있다.
- 정적 메소드는 static만 사용할 수 있다.
- 클래스 내부 기능을 사용할 때, static이 붙은 멤버 변수나 메소드만 사용할 수 있다.
- 클래스 내부 기능을 사용할 때, 인스턴스 변수나 인스턴스 메소드는 사용할 수 없다.
- 접근 제어자만 허락한다면 모든 곳에서 정적 메소드를 호출할 수 있다. → 정적 메소드는 공용이니까
메소드의 종류
- 정적 메소드
- 인스턴스 메소드
- 멤버 변수(필드)와 마찬가지다.
static 변수/메소드의 단점
- static 키워드로 선언되지 않은 변수는 heap에 할당된다.
- heap에서는 GC가 메모리를 관리하고, 더 이상 필요하지 않는 메모리는 회수한다.
- static 키워드로 선언된 변수, 메소드는 선언과 동시에 heap 영역이 아니라 메소드 영역의 static 영역에 보관된다.
- 프로그램이 종료될 때까지 GC에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비가 발생한다.
- 그리고 JVM이 종료될 때까지 제거되지 않으므로 메모리 낭비가 발생할 수 있다.
728x90
'CS > 그외' 카테고리의 다른 글
라이브러리 vs 프레임워크 (1) | 2024.07.16 |
---|---|
오버로딩과 오버라이딩 (0) | 2024.07.12 |
클래스, 객체, 인스턴스의 차이가 뭔가요? (0) | 2024.07.10 |
동기, 비동기 (0) | 2024.04.29 |