Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코딩공부
- 메서드
- 99클럽
- 면접(java
- github
- wil
- css
- CS
- Til
- Java
- 이진 탐색(binary search)
- Grafana
- 자료구조
- 개발자 취업
- GIT
- 정렬 알고리즘(sort algorithm)
- 항해99
- 프로그래머스
- 회고
- cs 공부)준비
- ArrayList
- 코딩테스트 준비
- Entity
- 자바
- 배열
- HTML
- 코딩
- Spring
- 코딩문제
- aop
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240705 static 본문
공부한 내용
static 변수
- static 변수는 쉽게 이야기해서 클래스인 붕어빵 틀이 특별히 관리하는 변수이다. 붕어빵 틀은 1개이므로 클래스 변수도 하나만 존재한다.
public class Data3 {
public String name;
public static int count; //static
}
- 이 코드에서 name과 count 모두 멤버 변수이다.
- 멤버 변수(필드) static이 붙은 것과 아닌 것에 따라 다음과 같이 분류할 수 있다.
멤버 변수(필드의 종류)
- 인스턴스 변수 : static이 붙지 않은 멤버 변수이다. 예) name
- static이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다. 따라서 인스턴스 변수라 한다.
- 인스턴스 변수는 인스턴스를 만들 때 마다 새로 만들어진다.
- 클래스 변수 : static이 붙은 멤버 변수이다. 예) count
- 클래스 변수, 정적 변수, static 변수 등으로 부른다. !용어를 모두 사용한다.
- static이 붙은 멤버 변수는 인스턴스와 무관하게 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다. 따라서 클래스 변수라 한다.
- 클래스 변수는 자바 프로그램을 시작할 때 딱 1개가 만들어진다. 인스턴스와는 다르게 보통 여러곳에서 공유하는 목적으로 사용된다.
변수와 생명주기
- 지역 변수(생명주기) : 지역 변수는 스택 영역에 있는 스택 프레임 안에 보관된다. 메서드가 종료되면 스택 프레임도 제거 되는데 이때 해당 스택 프레임에 포함된 지역 변수도 함께 제거된다. 따라서 지역 변수는 생존 주기가 짧다.
- 인스턴스 변수 : 인스턴스에 있는 멤버 변수를 인스턴스 변수라 한다. 인스턴스 변수는 힙 영역을 사용한다. 힙 영역은 GC(가비지 컬렉션)가 발생하기 전까지는 생존하기 때문에 보통 지역 변수보다 생존 주기가 길다.
- 클래스 변수 : 클래스 변수는 메서드 영역의 static 영역에 보관되는 변수이다. 메서드 영역은 프로그램 전체에서 사용하는 공용 공간이다. 클래스 변수는 해당 클래스가 JVM에 로딩 되는 순간 생성된다. 그리고 JVM이 종료될 때 까지 생명주기가 어어진다. 따라서 가장 긴 생명주기를 가진다.
⇒ static 이 정적이라는 이유는 바로 여기에 있다. 힙 영역에 생성되는 인스턴스 변수는 동적으로 생성되고, 제거된다. 반면에 static 인 정적 변수는 거의 프로그램 실행 시점에 딱 만들어지고, 프로그램 종료 시점에 제거된다. 정적 변수는 이름 그대로 정적이다.
static 메서드
- static 이 붙은 정적 메서드는 객체 생성 없이 클래스명 + . (dot) + 메서드 명으로 바로 호출할 수 있다. → 정적 메서드 덕분에 불필요한 객체 생성 없이 편리하게 메서드를 사용했다.
클래스 메서드
- 메서드 앞에도 static 을 붙일 수 있다. 이것을 정적 메서드 또는 클래스 메서드라 한다. 정적 메서드라는 용어는 static 이 정적이라는 뜻이기 때문이고, 클래스 메서드라는 용어는 인스턴스 생성 없이 마치 클래스에 있는 메서드를바로 호출하는 것 처럼 느껴지기 때문이다.
인스턴스 메서드
- static 이 붙지 않은 메서드는 인스턴스를 생성해야 호출할 수 있다. 이것을 인스턴스 메서드라 한다.
정적 메서드 활용
- 정적 메서드는 객체 생성이 필요 없이 메서드의 호출만으로 필요한 기능을 수행할 때 주로 사용한다.
- 예를 들어 간단한 메서드 하나로 끝나는 유틸리티성 메서드에 자주 사용한다. 수학의 여러가지 기능을 담은 클래스를 만들 수 있는데, 이 경우 인스턴스 변수 없이 입력한 값을 계산하고 반환하는 것이 대부분이다. 이럴 때 정적 메서드를 사용해서 유틸리티성 메서드를 만들면 좋다.
참고 자료
- 인프런 강의
'기술 > java' 카테고리의 다른 글
[TIL]240710 상속 (0) | 2024.07.10 |
---|---|
[TIL]240706 final (0) | 2024.07.06 |
[TIL]240704 자바 메모리 구조 (0) | 2024.07.04 |
[TIL]240702 접근 제어자(2) (0) | 2024.07.02 |
[TIL]240701 접근 제어자(1) (0) | 2024.07.01 |