이 글은 알파코에서 진행 중인 [신한투자증권] 프로디지털아카데미 6기 과정 중 백엔드 과목의 김송아 강사님의 강의를 기반으로 작성되었습니다
형변환
SmartPhone smartphone = new SamsongPhone();
자동으로 삼성폰이 스마트폰이 담긴다.
SamsongPhone samsongPhon1 = (SamsongPhone) new SmartPhone();
상속
현실세상에서는
- 부모가 먼저 태어나고 자식이 태어남
- 부모가 상속해줄 범위를 선택함
- 상속 받은 걸 그대로 안 써도 됨
자바세상에서는
- 자식이 다음에 태어남
- 자식이 상속해줄 범위 선택함
- 상속받은거 그대로 안써도 됨
컴파일러의 역할
- 타입이해 여부 o
- 문법적으로 맞는지 여부 체크 해주 기 때문에 이해 o
- 객체 이해 여부 x
- [Runtime Data Area]컴파일러는 런타임 전에 문법체크만 함
- static: 코드 → 힙: 객체 → 스택
- 로직 이해 여부 x
따라서, 컴파일 에러는 문법적인 에러다.
추상클래스
추상메소드가 0개여도 됨
왜냐면 어차피 직접 객체로 만들려고 한게 아니기 때문에
껍데기(추상메소드)를 내리려는 이유는?
하위 클래스가 반드시 구현해야 하는 "틀"을 정해주기 위해
오버로딩
People(String name, int age, String gender){
this.name = name;
this.age = age;
this.gender= gender;
}
People(int age, String gender){
this.age = age;
this.gender= gender;
}
@Override를 했는데 이름을 잘못 입력하면(ex: 부모클래스에 없는 메소드 이름 입력) 에러 발생함
이때, Parser는 compiler단계 중에 문법 분석단계만 담당해줌
이렇게 배운 내용들을 토대로 클래스를 상속받고 오버로딩 하는 실습을 진행해서 개념을 더 구체화 하면 좋을 것 같다.