2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

20240808_TIL_캠프 4주차 5일_인스턴스 멤버와 클래스 멤버

2024. 8. 9. 16:40ㆍ내배캠_Java 6기/Java 문법 종합반

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

📌 멤버 = 필드 + 메서드
 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
 클래스 멤버 = 클래스 필드 + 클래스 메서드

인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용

 

 

인스턴스 멤버

인스턴스 멤버는 객체를 생성해야 사용

 

또한 객체의 인스턴스 필드는 각각의 인스턴스마다 고유하게 값을 가질 수 있다.


➡️ Car 클래스로 Car1, Car2를 인스턴스화화면 각각 고유하다  

 

 

각 인스턴스 마다 메서드들이 매번 생성된다면 ? 

 

매번 저장한다면 중복 저장으로 인해 메모리 효율이 매우 떨어지기 때문에 모든 인스턴스들이 공유해서 사용

대신 무조건 객체를 생성 즉, 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한 

 

 

클래스 멤버 


✅  Java 클래스 로더에 의해 메서드 영역에 저장되고 사용

✅  메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버이다 → 객체의 생성 필요 없이 바로 사용 가능

 

➡️ 필드와 메서드를 클래스 멤버로 만들기 위해서 static 키워드 사용

 

1. 일반적으로 인스턴스마다 모두 가지고 있을 필요 없는 공용 데이터를 저장하는 필드는 클래스 멤버로 선언하는 게 좋음

2. 인스턴스 필드를 사용하지 않고 실행되는 메서드가 존재한다면 static 키워드를 사용하여 클래스 메서드로 선언 



주의점 

  • 클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없음
  • 반대로 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 있음
  • 클래스 멤버는 객체 생성 없이 바로 사용 가능하기 때문에 객체가 생성되어야 존재할 수 있는 인스턴스 멤버를 사용할 수 없음
static String company = "GENESIS"; // 자동차 회사 : GENESIS

String getCompany() {
    return "(주)" + company;
}
static String setCompany(String companyName) {
    // System.out.println("자동차 모델 확인: " + model); // 인스턴스 사용 불가
    company = companyName;
    return company;
}

 

자동차 회사를 변경할 수 있는 setCompany(String companyName)를 클래스 메서드로 만들어서 사용. 이때 인스턴스 필드인 model을 사용하려고 하면 오류가 발생

 

 

클래스 멤버 사용

클래스 멤버를 사용하려면 클래스의 이름과 함께 도트(.) 연산자를 사용

 

 

지역변수

메서드 내부에 선언한 변수를 의미하며 메서드가 종료될 때까지만 값이 유지된다

public class Main {
    public static void main(String[] args) {
        Main main = new Main();

        // 메서드 호출 : main.getClass()
        System.out.println("main.getClass() = " + main.getNumber());
        System.out.println("main.getClass() = " + main.getNumber());
        System.out.println("main.getClass() = " + main.getNumber());
    }

    public int getNumber() {
        int number = 1; // 지역 변수
        number += 1;
        return number; // 메서드 종료되면 지역변수 제거됨
    }
}

// 출력
//main.getNumber() = 2
//main.getNumber() = 2
//main.getNumber() = 2

 

 

상수 final 필드

  final 필드는 초기값이 저장되면 해당값을 프로그램이 실행하는 도중에는 절대로 수정 불가 

  또한 final 필드는 반드시 초기값을 지정해야 한다.

 

 

final 선언

 

final 앞에 static 키워드를 추가하여 모든 인스턴스가 공유할 수 있는 값이 한 개이며 불변인 상수를 선언

일반적으로 상수는 대문자로 작성하는 것이 관례

static final String COMPANY = "GENESIS";

...

System.out.println(Car.COMPANY);

 

 

728x90