Q 생성자는 메소드인가 아닌가
메소드인지 아닌지에 대해서는 아직 정해진 바가 없다. 학계에서 의견대립이 있는 소재이다.
- ('메소드이다'의 주장) 기존 메소드와 사용법과 형태가 비슷하다.
- ('메소드가 아니다'의 주장) 반환타입(return) 이 없다. / 클래스를 초기화시키는 특별한 역할을 가지고 있다.
초기화
처음 값을 지정할 때 쓰는 말 + 원래 상태로 돌린다.
=> “시작할 수 있다”
Class Person {
String name;
Person(String name..
New Person(“jini”) = 객체를 초기화한다. = 객체를 사용할 준비가 됨.
= 객체 생성 ! = 객체 생성 후 메모리에 올린다.
예) 변수를 초기화한다. 상태 초기화, 공장 초기화 ,,,,
Q 생성자는 오버라이딩이 되는가
오버라이딩
: 부모의 메소드를 자식 클래스에 맞게 덮어쓰기
메소드
: 사용할 수 있는 기능을 써놓은 설명서, 선언부와 구현부로 구성되어 있고 { }안에 문장들을 실행해주는 블록이다.
[메소드의 기본형태]
접근제어자 반환타입 이름 (매개변수) { // K&R방식이 표준
~~
}
1. (메소드) 접근 제어자
- public: 프로젝트 내부에서 제한이 없다.
- protected: 다른 패키지의 자손까지 접근 가능
- default: 같은 패키지
- private: 같은 클래스 (feat. 지역 변수)
2. 반환 타입 종류 : 기본형, 무제한 cf. 참조형
오버로딩/오버라이딩
‘생성자’는 오버로딩의 유래를 담고 있다.
Class Person {
String name;
Int age;
String phoneNum;
키, 몸무게, 성격, 국적, 주민번호, MBTI, 성별, 핸드폰번호…
Person(String name, int age){
this.name = name; //this: 클래스, iv
this.age = age;
}
Person(String name, int age, String phoneNum){
this.name = name; //this: 클래스, iv
this.age = age;
this.phoneNum = phoneNum;
}
}
생성자의 매개변수로 클래스변수와 같은 이름을 쓰더라도 키워드 this를 쓰는 이유는 뜻을 추측하고, 지역변수와 구분하기 위해서이다.
오버라이딩
Class Parent {
Public void method() {
System.out.println(“parent”);
}
}
Class Child extends Parent {
Public void method(){ //오버라이딩 >>오류
System.out.println(“child”);
}
Public void method(String str){ //오버로딩
System.out.println(str);
}
Public String method() { >> 오류
Return ”hoho”;
}
}
>> 오류가 난 이유 : 반환타입을 맞추지 않은 오버라이딩이 있기 때문에 오류가 나왔다.
오버라이딩을 하기 위해서는 반환타입까지 맞춰줘야 한다.
Q 반환타입은 오버라이딩에 영향이 있나? : 부모와 반환타입이 같아야 한다.
Q 반환타입은 오버로딩에 영향이 있나? : 오버로딩은 반환타입 달라도 잘 출력된다.
매개변수 개수와 타입의 차이: 메소드 호출 시, 어떤 메소드를 사용할 지 명확하게 구분하기 위한 것
@Override
public class OverrideDemo {
public static void main(String[] args) {
Child child = new Child(); child.method();
}
}
class Parent {
public void method() {
System.out.println("parent");
}
}
class Child extends Parent {
@Override // 컴파일러한테 '나, 아래 메소드 오버라이드할 건데.. 문법 체크 좀 해줄래?'하는 것
public void method() {
System.out.println("child");
}
}
@override 를 앞에 적으면 선언부 일치여부를 확인해준다.
- 컴파일러가 메소드 오버라이드의 문법체크를 해준다.
@를 컴파일러가 인식한다. 라이브러리이다.
- 어노테이션/애노테이션
- 어노테이션을 누군가가 구현해놨기 때문에 우리가 사용할 수 있는 것이다. -> 라이브러리
- 영향력은 바로 밑에 있는 것까지이다.
JDK가 하는 일
Jar파일 : java archive root
표준(기본) 라이브러리
- 프로젝트 생성할 때 기본적으로 필요한 “내가 직접 짜지 않은 코드들”
- 기본적인 어노테이션은 표준 라이브러리에 내장되어 있다.
Cmd+클릭: 어떤 코드가 어디에 있는지 볼 수 있다. 참고용으로 한번씩 보기