객체지향 프로그램
- 상태 (사물의 속성)와 행동(속성을 통해서 사물이 수행)을 가지는 객체
상태, 행동
- 상태 : 출발지 + 종착지, 남은 기름 양, 타이어 손상, 승객 수
- 행동 : 어딘가로 이동, 기름 사용, 엔진 시동 켬, 앞/뒷문 연다
공통점
- 모든 버스는 엔진 킬 수 있음
- 출발지와 도착지 있음
- 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 |