문법 종합반 3주차 - (2)
06. 상속
- 클래스(설계도) 간의 관계를 더욱 끈끈하게 만들 수 있어요
- 공통적인 요소들이 있다면 부모/자식 클래스를 구분해서 상속관계를 만들 수 있어요
- 코틀린은 다른 언어들과 달리 생략된 final 키워드로 기본적으로 상속을 막아두었어요
- 무분별한 상속으로 예상치 못한 흐름을 방지하기 위해 막았어요
- 코틀린은 open 키워드를 활용해서 상속 관계를 만들 수 있어요
▶ 어디에 사용하는가?
- 다형성을 구현할 수 있어요
- 클래스의 내용을 변경해야하는경우 부모 클래스만 변경하는것으로 공수를 줄일 수 있어요
ex1) 닭, 참새, 비둘기는 새라는 부모에서 출발했다는 관계를 만들어줄 수 있어요
ex2) 부모클래스(Bird)에서 생성자를 활용하는 경우에 자식에서 객체 생성시 전달해줘야해요
07. 오버라이딩
- 상속받은 부모 클래스의 정보(프로퍼티)나 행위(메소드)를 재설계할 수 있어요
- 주로 부모 클래스의 행위(메소드)를 재설계해요
- 이러한 행위를 오버라이딩 (Overriding)이라고 해요
- 단축키 : Control + O (Windows)/ Command + O (Mac)
▶ 어디에 사용하는가?
: 공통적인 내용을 부모 클래스에서 관리하는건 좋지만, 자식 클래스의 개성을 살리고 싶어요
▶ 어차피 재설계 할거면 왜?
- OOP관점에서는 클래스들간의 관계를 만들고, 일관성을 유지하는 목표를 가집니다
- 만약 필요한 기능이 있을때마다 별도의 이름으로 만들게된다면 일관성을 해쳐요
- 프로그램에 문제가 생기지는 않지만 재사용성이 떨어져 유지보수가 어려워요
08. 오버로딩
- 매개변수의 갯수를 다르게하면 동일한 이름으로 메소드를 만들 수 있어요
- 매개변수의 자료형을 다르게하면 동일한 이름으로 메소드를 만들 수 있어요
- 반환자료형(반환형)은 오버로딩에 영향을 주지 않아요
▶ 어디에 사용하는가?
- 두 개의 정수를 매개변수로 받아 더하는 메소드를 add라는 이름으로 만들었어요
- 하지만 두 개의 실수(소수)를 매개변수로 받아 더하는 메소드도 만들어야해요
- 더하는거니까 add라는 이름이 적합한데 어떻게 해야할까요?
- addInt, addDouble 이렇게 메소드를 따로 만드는건 나중에 관리하기 힘들어져요
- 이 상황에서는 더해야하는 자료형이 정수,실수로 다르니까 오버로딩으로 해결할 수 있어요
EX) 정수나 실수값 두개를 매개변수로 받아서 덧셈결과를 리턴해주는 add메소드를 만들어요
09. 인터페이스
▶ 문제
- 앞서 상속으로 닭, 참새, 비둘기와 부모 클래스인 Bird의 관계를 만들었어요
- 하지만 새에도 많은 종류가 있고, 고유한 행동도 달라요
- 코틀린은 반드시 부모 클래스는 한개라서 모두 상속으로 처리할 수 없어요\
▶ 해결
- 따라서 근본적인 공통점을 상속 받고, 추가적인 기능들은 인터페이스로 추가해요
- 코틀린은 인터페이스를 만들기 위해 interface 키워드를 사용해요
▶ 어디에 사용하는가?
- 상속으로 클래스들간의 관계를 성공적으로 구분했어요
- 닭, 참새, 비둘기까지는 문제없지만 오리가 추가된다면 고민이 생겨요
- 보통 새는 헤엄치다라는 행위가 없기 때문에 부모 클래스에 추가하는 것은 올바르지 않아요
- 오리를 제외하고도 물에서 서식하는 조류는 별도의 기능이 필요해요
ex)
출처 : 내배캠 강의자료
'Today I learned > 용어정리' 카테고리의 다른 글
"::" 이 가지는 의미? (0) | 2024.03.07 |
---|---|
초기화란? (0) | 2024.03.07 |
문법 종합반 3주차 - (1) (0) | 2024.03.06 |
프로퍼티와 메서드 (0) | 2024.03.06 |
기본 타입 (2) | 2024.03.05 |