[Java] 인스턴스 멤버와 클래스 멤버

김세림·2024년 4월 25일

Java

목록 보기
9/24
post-thumbnail

인스턴스 멤버와 클래스 멤버


클래스를 이루고 있는 것은 필드, 생성자, 메서드 이다.
이중 필드와 메서드를 멤버 라고 표현한다.

인스턴스 멤버

인스턴스 멤버란?

인스턴스 멤버는 객체를 생성해야 사용할 수 있으며, 각각의 인스턴스 필드는 고유한 값을 가진다.
그렇다고 객체가 인스턴스화 할때마다 그 메서드들이 모두 다 그 객체에 포함되는 것은 아니다.
일단 메모리 적으로도 효율이 안좋아 질 뿐더러 한 곳에 메서드 하나만을 올려놓고 인스턴스들이 그 공간에 들러서 공유하여 사용하는 것이라고 이해하면 된다.

클래스 멤버

클래스 멤버란?

클래스 멤버는 static 키워드를 사용하여 만들고, 객체 생성없이 바로 사용이 가능하다.
인스턴스마다 각자 가지고 있을 필요가 없는 공용적인 데이터를 저장하는 필드를 클래스 멤버로 선언한다.

⚠️주의!

클래스 멤버로 선언한 메서드는 인스턴스 멤버를 사용할 수 없고,
인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 있다.

//Car클래스
String model = "Audi"
static String company = "GENESIS"; // 자동차 회사 : GENESIS
String getCompany() {
    return "(주)" + company;
} //와 같이 인스턴스 메서드 안에 클래스 멤버 사용이 가능하지만

static String setCompany(String companyName) {
    // System.out.println(model); 
}// 클래스 메서드에서는 인스턴스 멤버를 사용할 수 없다.

클래스의 멤버 사용은 위에 말한것과 같이 객체 생성없이 바로 사용이 가능하다는 장점이 있다.

//Main클래스
Car.company = "Audi";
String companyName = Car.setCompany("Benz");

Car car = new Car(); //참조형 변수를 사용한 객체생성 
car.company = "Ferrari";
//이와같이 참조형 변수를 사용해서도 접근이 가능하지만 추천하지 않는다.

지역변수

메서드 내부에서 선언한 변수를 의미하며 전역변수와 반대되는 개념이다.
휘발성이 있는 변수로써 메서드가 실행될 때마다 독립적인 값을 저장하고 관리하며, 메서드가 종료될 때까지만 유지된다.

public int getNumber() {
        int number = 1; // 지역 변수
        number += 1;
        return number; // 메서드 종료되면 지역변수 제거됨
} //이 메서드를 호출하면 계속 2라는 값만 나옴.

final필드와 상수

final은 최종적이라는 의미로 이전 변수에서 나왔던 상수의 개념을 다시한번 정리해보도록 하겠다.

  • final필드는 반드시 초기값을 지정해야하며 절대로 수정할 수 없는 값이다.
  • 사용방법은 일반적인 인스턴스 필드와 동일하나 수정하려고 하면 오류가 발생한다.
    ex) car.company = "Benz"; //오류 발생

이에 따른 상수를 선언할 때 static final을 함께 추가하면 모든 인스턴스가 공유할 수 있는 값이 하나이며 불변인 상수를 선언할 수 있다.
또한 상수는 대문자로 작성하는 것이 관례이다.

0개의 댓글