오늘은 저번주에 했던 객체지향 프로그래밍에 심화과정에 대해 복습했다
상속
클래스간 부모/자식을 나눠 상속관계를 만들수 있고 서로 상속관계를 만들어 다형성을 구성할수있다
생략된 final키워드로 기본적으로 상속을 막혀있으며 open 키워드를 이용하여 상속관계를 만든다
fun main(){
//변수
//메소드
}
open class parents{
//메소드
}
class son : parents(){
//:부모
//부모의 메소드를 상속받아서 실행
}
오버라이딩
상속 받은 부모클래스의 프로퍼티 와 메소드를 재설계하고 공통된 부분을 부모클래스가 관리하고 자식클래스의 개성을 살릴때 사용한다
객체지향 프로그래밍 관점에서 클래스간의 관계를 만들고 일관성을 유지시키기 위해 사용한다 프로젝트가 커지면서 클래스가 무분별하게 늘어나면 재사용성도 떨어지고 일관성도 떨어지게 된다
오버라이딩 단축키
Ctrl + o / Cmd + o
fun main(){
//변수
//메소드
}
open class parents(name:String){
var name: String = ""
init{
//this는 현재 클래스의 상태변수
this.name = name
}
open fun hello(){
// 메소드 동작
}
}
class son(name:String, age:Int): parents(name){
var age:Int = 0
init{
this.age = age
}
//Ctrl + o 단축키 입력
override fun hello(){
//super객체는 부모를 의미 자동생성
// 새로운 행위 재설계
}
}
이해한게 맞다면 기본틀은 이런식으로 구성되어 불러불러 새롭게 재설계하게끔 코드를 작성할수있다
오버로딩
동일한 이름의 메소드를 매개변수의 갯수나 자료형을 다르게하면서 동일한 이름의 메소드를 만들수있다
같은 동작을 하는 메소드이지만 자료형이 다르거나할때 두개의 메소드를 만들기 보단 오버로딩으로 관리한다
class Calc{
fun add(num1:Int,num2:Int):Int{
return num1+num2
}
fun add(num1:Double, num2:Double):Double{
return num1+num2
}
// 자료형이 다를때 매개변수를 다르게 설정하여 같은이름의 메소드를 만들기
}
인터페이스
공통적으로 필요한 기능을 외부에서 추가한다
부모클래스는 한개라 모두 상속처리가 불가할때 근본적인 공통점을 상속받고 추가적인 기능을 인터페이스로 추가할수있다
interface 인터페이스이름 {
fun 메소드이름()
}
//로직이 존재하지 않고 이름만 존재할때 추상메소드라고 한다
//인터페이스는 추상메소드만 작성하는게 원칙이지만 최근에는 아니여도 된다 되도록 추상메소드로 작성할것
상속으로 클래스간의 관계를 구분했지만 기존의 공통되지않은 클래스의 새로운 기능을 추가할때 사용한다
interface WaterBirdBehavior {
fun swim()
// fun swim() {
// println("수영 합니다")
// }
}
인터페이스 파일을 만들어준다
fun main() {
var bird = Bird("새")
var chicken = Chicken("닭")
var duck = Duck("오리")
bird.fly()
chicken.fly()
duck.swim()//새로운 기능을 써야하는 친구
}
open class Bird(name:String) {
var name: String = ""
init {
// this는 현재 클래스의 상태변수를 의미합니다
// var name: String = ""
this.name = name
}
fun fly() {
println("${name} 날아요~")
}
}
class Chicken(name: String) : Bird(name) {
}
class Duck(name: String) : Bird(name), WaterBirdBehavior//인터페이스추가 {
override fun swim() {
println("${name}가 수영해요~")
}
//인터페이스 파일의 메소드를 오버라이딩 할수있다
}
다 비슷한거 같고 똑같아 보여서 큰일이다 예시를 내 방식대로 쓰고싶은데 아직은 많이 어려운거 같아서 조금 더 활용해보고 에러를 만나보기도 하면서 몸에 익혀야겠다
오늘도 고생했다 !
'TIL' 카테고리의 다른 글
23/12/13kotlin (0) | 2023.12.13 |
---|---|
23/12/12kotlin (1) | 2023.12.12 |
23/12/08 (0) | 2023.12.08 |
23/12/07kotlin (1) | 2023.12.07 |
23/12/05kotlin (2) | 2023.12.05 |