객체지향 프로그래밍(14강 - 16강)

static 변수, 메서드

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과 같음
      }
    }