본문 바로가기
Java Study

class의 필드(변수)와 메서드(함수)의 종류

by xogns93 2024. 7. 15.

인스턴스 필드  (오브젝트 필드)

 

인스턴스 필드는 클래스의 각 객체마다 별도로 유지되는 변수입니다. 즉, 클래스의 각 인스턴스는 자체의 인스턴스 필드 값을 가집니다.

  • 정의: 클래스 내에서 static 키워드 없이 선언된 필드.
  • 메모리: 각 객체마다 별도로 저장됩니다.
  • 접근: 인스턴스를 통해 접근합니다.

 

 

스태틱 필드  (클래스 필드)

 

정적 필드(스태틱 필드)는 클래스에 속하는 변수로, 해당 클래스의 모든 객체가 공유합니다. 정적 필드(스태틱 필드)는 클래스가 메모리에 로드될 때 한 번 초기화됩니다.

  • 정의: 클래스 내에서 static 키워드와 함께 선언된 필드.
  • 메모리: 클래스 로더에 의해 메모리에 한 번만 로드됩니다.
  • 접근: 클래스 이름으로 접근하며, 인스턴스를 통해서도 접근할 수 있습니다.
public class Car {
    // 정적 필드: 클래스에 속하며 모든 인스턴스가 공유
    public static int numberOfCars = 0;

    // 인스턴스 필드: 각 객체에 속하며 독립적
    private String model;
    private int year;

    // 생성자: 객체가 생성될 때 호출
    public Car(String model, int year) {
        this.model = model;
        this.year = year;
        numberOfCars++;  // 새로운 객체가 생성될 때마다 정적 필드를 증가시킴
    }

    // 인스턴스 메서드: 인스턴스 필드에 접근
    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }

    // 정적 메서드: 정적 필드에 접근
    public static int getNumberOfCars() {
        return numberOfCars;
    }

    public static void main(String[] args) {
        // 정적 메서드 호출: 클래스 이름을 통해 직접 접근
        System.out.println(Car.getNumberOfCars()); // 출력: 0

        // 새로운 인스턴스 생성
        Car car1 = new Car("Toyota", 2020);
        Car car2 = new Car("Honda", 2019);

        // 정적 메서드 호출: 객체를 통해서도 접근 가능
        System.out.println(Car.getNumberOfCars()); // 출력: 2

        // 인스턴스 메서드 호출: 각 객체의 인스턴스 필드에 접근
        System.out.println(car1.getModel()); // 출력: Toyota
        System.out.println(car2.getModel()); // 출력: Honda
    }
}

 

 

주요 차이점

  • 소속:
    • 인스턴스 필드: 각 객체에 속합니다.
    • 정적 필드: 클래스에 속합니다.
  • 메모리 할당:
    • 인스턴스 필드: 각 객체가 생성될 때마다 별도로 할당됩니다.
    • 정적 필드: 클래스가 처음 로드될 때 한 번만 할당됩니다.
  • 공유:
    • 인스턴스 필드: 객체마다 독립적입니다.
    • 정적 필드: 모든 객체가 공유합니다.
  • 접근 방법:
    • 인스턴스 필드: 객체를 통해 접근합니다.
    • 정적 필드: 클래스 이름을 통해 직접 접근할 수 있으며, 객체를 통해서도 접근 가능합니다.
  • 요약
    • 인스턴스 필드는 각 객체에 속하며, 객체마다 별도로 존재합니다.
    • 정적 필드는 클래스에 속하며, 클래스의 모든 인스턴스가 공유합니다.

오브젝트 메서드 (Instance Method)

 

오브젝트 메서드는 클래스의 인스턴스(객체)에 속하는 메서드입니다. 이 메서드는 인스턴스의 필드(멤버 변수)에 접근할 수 있고, 인스턴스별로 다른 동작을 수행할 수 있습니다. 오브젝트 메서드는 객체가 생성된 후에 호출할 수 있습니다.

 

특징:

  • 소속: 클래스의 인스턴스에 속합니다.
  • 호출 방법: 객체를 통해 호출됩니다.
  • 액세스: 인스턴스 변수와 다른 인스턴스 메서드에 접근할 수 있습니다.
  • 키워드: this 키워드를 사용하여 현재 인스턴스를 참조할 수 있습니다.

 

 

 

스태틱 메서드 (Static Method)

 

스태틱 메서드는 클래스 자체에 속하는 메서드입니다. 이 스태틱 메서드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있습니다. 일반적으로 유틸리티 함수나 인스턴스 독립적인 작업을 수행할 때 사용됩니다.

 

특징:

  • 소속: 클래스 자체에 속합니다.
  • 호출 방법: 클래스 이름을 통해 호출됩니다.
  • 액세스: 인스턴스 변수나 인스턴스 메서드에 접근할 수 없습니다. 대신 스태틱 변수와 다른 스태틱 메서드에만 접근할 수 있습니다.
  • 키워드: this 키워드를 사용할 수 없습니다.

 

주요 차이점

  1. 소속:
    • 오브젝트 메서드: 클래스의 인스턴스에 속합니다.
    • 스태틱 메서드: 클래스 자체에 속합니다.
  2. 호출 방법:
    • 오브젝트 메서드: 객체를 통해 호출됩니다.
    • 스태틱 메서드: 클래스 이름을 통해 호출됩니다.
  3. 액세스:
    • 오브젝트 메서드: 인스턴스 변수와 메서드에 접근할 수 있습니다.
    • 스태틱 메서드: 인스턴스 변수와 메서드에 접근할 수 없고, 스태틱 변수와 메서드에만 접근할 수 있습니다.
  4. 키워드:
    • 오브젝트 메서드: this 키워드를 사용할 수 있습니다.
    • 스태틱 메서드: this 키워드를 사용할 수 없습니다.

 

사용 시기

  • 오브젝트 메서드: 인스턴스별로 다른 동작을 수행해야 하거나, 인스턴스 변수에 접근해야 할 때 사용합니다.
  • 스태틱 메서드: 인스턴스와 독립적으로 동작해야 하거나, 유틸리티 성격의 메서드를 작성할 때 사용합니다.

 

오브젝트 메서드 = 인스턴스 메서드 ,       오브젝트 필드 = 인스턴스 필드

스태틱 메서드 = 클래스 메서드,        스태틱 필드 = 클래스 필드

'Java Study' 카테고리의 다른 글

동일성(Identity)과 동등성(Equality)  (0) 2024.07.16
캐시(Cache)와 캐싱(Caching)  (0) 2024.07.16
java 런타임 데이터 에리어  (0) 2024.07.15
this 키워드와 super 키워드  (0) 2024.07.15
접근 제어자(access modifier)  (0) 2024.07.15