: 멤버 = 필드 + 메서드
: 인스턴스 멤버 = 인스턴스(필드 + 메서드) / 클래스 멤버 = 클래스(필드 + 메서드)
: 필드와 메서드는 선언하는 방법에 따라 인스턴스냐 클래스냐 구분할 수 있음
: 인스턴스 멤버는 객체 생성 후 / 클래스 멤버는 객체 생성 없이 사용할 수 있다. 따라서 main메서드는 클래스 멤버이다.
: 객체를 생성해야 사용할 수 있다.
: 객체의 인스턴스 필드는 각각 고유한 값을 가질 수 있다.
: 객체가 인스턴스화할 때마다 객체의 메서드들이 인스턴스에 포함되는가? NO! 객체 메서드를 메서드 영역에 두고 인스턴스들이 공유하도록 한다.
: 무조건 객체를 생성, 즉 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어둠! 생성과 사용이 분리!
: Java의 클래스 로더에 의해서 메서드 영역에 고정적인 위치에 저장되고 사용된다.
: 따라서 객체의 생성 필요 없이 바로 사용 가능.
: 선언 방법은 static 키워드를 사용하면 된다.
: 인스턴스들이 모두 가질 필요 없는 공용적인 데이터를 저장할 때, 인스턴스 필드를 사용하지 않고 실행되는 메서드에 사용하면 좋다.
: 클래스 멤버는 static으로 선언되어 있기 때문에(=고정위치에 저장되어 있기 때문에) 바로 사용 가능(상단 박스)
: 클래스 이름으로 접근하는 것이 좋다.
: 객체에서 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"로 바꿨다.
: 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리한다.
: 메서드 내부에서 정의될 때 생성된다.
: 해당 메서드가 종료될 때 지역 변수는 소멸한다.
: 값은 "2" "2" 로 나온다. 그 이유는 유지되지 않고 메서드가 실행될 때마다 생성 후 소멸하는 지역변수 이기 때문이다.
: final 또한 제어키워드, final 필드는 초기값 설정이 필요하다.
: 최정적이라는 의미, final 필드는 초기값이 저장되면 해당 값을 프로그램이 실행하는 도중에는 절대로 수정할 수 없다.
: final과 static을 결합하면, 프로그램 자체에서 쓰이는 상수임과 동시에 공용으로 쓰이는 값이 된다. 공용 사용되는 상수.
: 상수 = final, 상수명은 전체를 대문자로 하는 게 관례이다.
<TMI. 추상화는 어렵다. 그림도 코딩도...>
[TIL#11-3] Java를 자바랑 part.5 <메서드> (1) | 2023.10.19 |
---|---|
[TIL#11-2] Java를 자바랑 part.5 <객체, 메서드> (0) | 2023.10.19 |
[TIL#11-1] Java를 자바랑 part.5 <객체 지향 프로그래밍이란?> (0) | 2023.10.19 |
[TIL#9] Java를 자바랑 part.4 <배열(다차원, 가변), 컬렉션(ArrayList, LinkedList, Stack, Queue, Set, Map) (1) | 2023.10.17 |
[TIL#8] Java를 자바랑 part.3 <연산자, 조건문(if, switch-case), 반목문(for, while, break, countinue), 배열(Arrays.), 깊은복사&얕은복사> (2) | 2023.10.16 |