객체지향 프로그래밍(14강 - 16강)
13 Dec 2019static 변수, 메서드
static 변수
-
여러 인스턴스가 하나의 값을 공유할 필요가 있을 때
-
static 변수는 처음 프로그램이 로드될 때 데이터 영역에 생성됨(큰 메모리를 사용하지 않도록 주의)
-
인스턴스의 생성과 상관없이 사용할 수 있으므로 클래스 이름으로 참조
Student.serialNum = 100;'
-
클래스 변수, 정적 변수라고도 함
-
데이터 영역에 위치한 동일한 메모리를 참조
- 인스턴스 변수는 스택 메모리에, 인스턴스는 힙 메모리에 위치하고 인스턴스 변수의 static 변수는 데이터 영역에 위치
static 메서드
-
static 변수를 위한 기능을 제공하는 static 메서드
-
static 메서드에서는 인스턴스 변수를 사용할 수 없음
-
클래스 이름을 참조하여 사용하는 메서드
Student.getSerialNum();
-
클래스 메서드 또는 정적 메서드라고도 함
프로그램에서 변수의 유형
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
---|---|---|---|---|
지역 변수 | 함수 내부 | 함수 내부에서만 사용 | 스택 | 함수가 호출될 때 생성되고 함수가 끝나면 소멸 |
멤버 변수 (인스턴스 변수) |
클래스 멤버 변수로 선언 | 클래스 내부에서만 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 | 힙 | 인스턴스가 생성될 때 힙에 생성되고 가비지 컬렉터가 메모리를 수거할 때 소멸 |
static 변수 | static 예약어를 사용하여 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 | 데이터 영역 | 프로그램이 처음 시작될 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸 |
Singleton Pattern
-
단 하나만 존재하는 인스턴스
-
생성자는 private
-
static으로 유일한 객체 생성
-
외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드 구현
// Company.java public class Company { private static Company company = new Company(); private Company() {} public static Company getInstance() { return company; } }
// CompanyTest.java public class CompanyTest { public static void main(String[] args) { Company company1 = Company.getInstance(); Company company2 = Company.getInstance(); System.out.println(company1); System.out.println(company2); // company1과 같음 } }