본문 바로가기

OOP

객체 지향 프로그램 (OOP)

객체지향 프로그램

- 상태 (사물의 속성)와 행동(속성을 통해서 사물이 수행)을 가지는 객체

 

상태, 행동

- 상태 : 출발지 + 종착지, 남은 기름 양, 타이어 손상, 승객 수

- 행동 : 어딘가로 이동, 기름 사용, 엔진 시동 켬, 앞/뒷문 연다

 

공통점

- 모든 버스는 엔진 킬 수 있음

- 출발지와 도착지 있음

- n명 이상 탑승 가능

- 경유 공급 받음

 

상속 X

상속이 없이 계속해서 버스 추가(마을 버스, 호텔 셔틀 버스, 공항 셔틀 버스 등등)하는 것은 비효율적이다.

 

차이점

  출발지-도착지 사이 정류장 입석
시내버스 (City Bus) 수많은 정류장 입석 가능
광역버스 (Wide Bus) 몇 개의 정류장 입석 불가능
고속버스 (Express Bus) 정류장 없음 입석 불가능

 

상속 O

- Bus 클래스 상속

open class Bus {
    
    var departure = "서울"
    var arrive = "부산"
    
    fun engineStart(){
        println("부릉부릉")
    }
    
    open fun departure(){
        println("출발합니다.")
        println("${departure}에서 ${arrive}로 출발합니다.")
    }
    
}
class CityBus : Bus(){
    val stop1 = "신림역"
    val stop2 = "신도림역"
    val stop3 = "홍대입구역"

    override fun departure() {
        super.departure()

        println("정차 정류장은 $stop1 - $stop2 - $stop3")
    }

}
class WideBus : Bus() {
    var stop1 = "판교"
    var stop2 = "두정역"

    override fun departure() {
        super.departure()
        println("정차 정류장은 $stop1 - $stop2")
    }

}
class ExpressBus : Bus() {
    override fun departure() {
        super.departure()
    }
}

 

- Bus라는 다형성 가진 terminal 리스트에 객체 생성해 넣어줌

fun main(){

    val terminal = arrayListOf<Bus>()

    val seoulToBusanBus = ExpressBus()
    seoulToBusanBus.departure = "서울"
    seoulToBusanBus.arrive = "부산"
    terminal.add(seoulToBusanBus)

    val seoulToCheonanBus = WideBus()
    seoulToCheonanBus.departure = "서울"
    seoulToCheonanBus.arrive = "천안"
    seoulToCheonanBus.stop1 = "판교"
    seoulToCheonanBus.stop2 = "두정역"
    terminal.add(seoulToCheonanBus)

    terminal.forEach{bus ->
        bus.engineStart()
        bus.departure()
    }

}

 

'OOP' 카테고리의 다른 글

예외(Exception)  (0) 2023.12.22
디자인 패턴  (0) 2023.08.25
OOP 정리  (0) 2023.08.25
Private  (0) 2023.08.25
업 캐스팅, 다운 캐스팅  (0) 2023.08.11