상세 컨텐츠

본문 제목

[TIL#11-4] Java를 자바랑 part.5 <인스턴스 멤버와 클래스 멤버>

내배캠/Chapter2

by DK9 2023. 10. 19. 20:32

본문

지금까지 배운 모든 것(필드, 메서드)은 인스턴스 멤버!

 

1. 기본 개념

 : 멤버 = 필드 + 메서드

 : 인스턴스 멤버 = 인스턴스(필드 + 메서드)  /  클래스 멤버 = 클래스(필드 + 메서드)

 : 필드와 메서드는 선언하는 방법에 따라 인스턴스냐 클래스냐 구분할 수 있음

 : 인스턴스 멤버는 객체 생성 후  /  클래스 멤버는 객체 생성 없이 사용할 수 있다. 따라서 main메서드는 클래스 멤버이다.

 

2. 인스턴스 멤버

 : 객체를 생성해야 사용할 수 있다.

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

 : 객체가 인스턴스화할 때마다 객체의 메서드들이 인스턴스에 포함되는가? NO! 객체 메서드를 메서드 영역에 두고 인스턴스들이 공유하도록 한다.

 : 무조건 객체를 생성, 즉 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어둠! 생성과 사용이 분리!

 

3. 클래스 멤버

 : Java의 클래스 로더에 의해서 메서드 영역에 고정적인 위치에 저장되고 사용된다.

 : 따라서 객체의 생성 필요 없이 바로 사용 가능.

 : 선언 방법은 static 키워드를 사용하면 된다.

 : 인스턴스들이 모두 가질 필요 없는 공용적인 데이터를 저장할 때, 인스턴스 필드를 사용하지 않고 실행되는 메서드에 사용하면 좋다.

 1) 사용

 : 클래스 멤버는 static으로 선언되어 있기 때문에(=고정위치에 저장되어 있기 때문에) 바로 사용 가능(상단 박스)

 : 클래스 이름으로 접근하는 것이 좋다.

 

 2) 연습

객체(인스턴스) 메인클래스  /  설계도클래스 car클래스

 : 객체에서 Car.company를 호출했는데 설계도에서 보니 static이라서 company에 해당하는 객체를 추가 생성할 필요 없이 그냥 불러올 수 있다. 값은 "GENESIS"

 : 이후 객체에서 Car.company를 "Audi"로 강제 변경 후 출력했다.

 : String companyName = Car.setCompany("Benz"); 로 클래스 메서드를 호출했다. input값을 문자열 companyName이고 이 경우 Benz가 해당된다. 로직에 따라 "companyName = Benz" 가 출력된다.

 : Car car = new Car( ); Car을 인스턴스화했다. 그리고 car로 company에 접근을 해서 "Ferrari"로 바꿨다.

 : 마찬가지로 인스턴스화한 car을 통해 setCompany를 경유해 company에 접근 "Lamborghini"로 바꿨다.

 

4. 지역변수

 : 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리한다.

 : 메서드 내부에서 정의될 때 생성된다.

 : 해당 메서드가 종료될 때 지역 변수는 소멸한다.

 : 값은 "2" "2" 로 나온다. 그 이유는 유지되지 않고 메서드가 실행될 때마다 생성 후 소멸하는 지역변수 이기 때문이다.

 

5. final 필드와 상수

 : final 또한 제어키워드, final 필드는 초기값 설정이 필요하다.

 : 최정적이라는 의미, final 필드는 초기값이 저장되면 해당 값을 프로그램이 실행하는 도중에는 절대로 수정할 수 없다.

 : final과 static을 결합하면, 프로그램 자체에서 쓰이는 상수임과 동시에 공용으로 쓰이는 값이 된다. 공용 사용되는 상수.

 : 상수 = final, 상수명은 전체를 대문자로 하는 게 관례이다.

 

 

<TMI. 추상화는 어렵다. 그림도 코딩도...>

관련글 더보기