class의 변수와 method 호출하기


- Car라는 클래스를 만들어 안에 변수와 메서드를 입력해주었다
- 특정 클래스를 사용하기 위해서는 객체화를 해야한다
- 객체화(복사)를 해야 여러군데(여러명)에서 쓸 수 있고 마음대로 변경이나 버려도 된다.
- 9 : 객체화 하는 과정
- 객체화를 한 변수인 car. 를 치면 쓸 수 있는 변수나 메서드들이 나온다
method overload

↓

- 여러개의 메서드를 만들 경우 하나하나 작명하기가 힘들다.( 개발자입장에서 편하게 )
- method overload를 사용하면 같은 이름으로 여러 개 제작이 가능하다.

- main 클래스에서 객체화를 해주고 메서드를 호출하여 사용할 때 다 같은 메서드 이므로 아무거나 선택 후 만든 메서드에 충족될만한 인자값을 넣으면 알아서 찾아간다. ( 사용자 편안 )
- overload -> 면접 볼때 많이 물어보고 실제로 어떻게 쓰는지 예시를 설명 해주면 좋음 ★
정적 멤버와 static keyword


- class Sub에 변수와 메서드를 만들어 주었다
- static영역은 원본이 저장되는 영역이다
- static 활용 : 원본을 수정해야하는경우
- 9 : multi는 static영역이 아니기 때문에 객체화를 시켜 사용 가능
- 13 : static으로 선언된 메서드일때는 객체화된 변수를 사용할 수 없다
○ 하지만 jdk에서 편의성을 위해 내부적으로 접근가능하도록 처리한다.
○ 해당 객체의 원본을 찾아서 연결해준것
○ 사용할 수 있으나 이렇게 하지 말 것
- 19, 20, 21 : 13의 오류를 해결하는 방법
○ static 멤버는 복사가 안되기 때문에 static -> 원본 -> class 순으로 접근해야한다
○ 그래서 class명 직접 치고 접근해야한다
- 정적멤버 : 한번 생기면 잘 지워지지 않음

- static으로 선언한거는 s 표시됨
static block

- static은 생성자를 만들어 초기화가 불가능 하다
○ Monitor 클래스를 보면 5,6 처럼 static 멤버를 초기화 해줄 수 있다
○ static block : 8 ~12 처럼 static block을 만들어 초기화를 해줄 수도 있다
- main 클래스를 실행 했을 경우에 main클래스의 5 -> 7이 실행된후 8의 static멤버를 불러오면서 Monitor 클래스의 static block이 먼저 실행된다
○ Monitor 속성 호출 -> static block 실행 -> Monitor 속성 값 반환
- 그 후에 main 클래스의 8,9,10이 실행된다
final keyword


- Person 클래스에서 final로 변수 선언이 되었다
- 9 : person은 final로 선언 되었기 때문에 여기서 한번 초기화되면 변경이 불가능하다.
- 14, 15 : 위에서 한번 초기화되었기 때문에 변경 불가
- Person 클래스의 7 : static final의 경우 해당 클래스 안에서만 static block을 만들어 초기화가능하고 외부에서 절대 불가능하다
- static final
○ 불변의 값으로 상수라고 하며 모두 대문자로 표기한다. 건들지 말것 ( 예: 주민번호 )
○ static이기 때문에 생성자도 못쓰고 final 이기때문에 값도 변경못한다
○ static이기만 하면 class로 호출해서 값 변경가능
○ final이기만 하면 생성자를 생성해서 값 변경가능
6. Import


- 다른 폴더에 있는 클래스를 불러와서 객체화 할 때 Import문을 쓴다
- 16 : 다른 패키지에 있는 Calculator를 불러와서 객체화를 시켰다
○ 이 때 클래스 명을 입력하면서 자동완성 기능으로 불러오면 Import문이 자동으로 생긴다
○ 하지만 cal에 있는 메서드 들에 접근제한자가 걸려 있어서 메서드는 아무것도 못불러옴
접근제한자

- 내부적으로만 사용할 코드가있을 경우에 사용한다.
- public : 모든 파일 접근 가능
- private : 자기 파일(class) 벗어날수 없음
- default(아무것도 안쓰고 변수형 타입 바로 쓰는거) : 폴더 벗어날수 없음

- 이렇게 특정부분의 접근을 제한하는 것을 캡슐화 라고 부른다
private 외부에서 꼭 써야 하는경우

- alt + shift + s 키를 누르면 getter setter 생성할수 있는 키워드 있다
- get은 보여주기만 하는거, set은 수정도 가능하게 만든 것이다

- get을 이용해 볼수 있고 set을 이용해 수정 가능
static에서 같은영역 메서드 부르기

- 7 : static영역에서 static영역 메서드를 부를 때 선언 방식
- 11 , 12 : static 영역에서 instance 멤버로 바로 접근이 불가하기 때문에 객체화를 시켜주고 불러야 한다.