문법 종합반 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