▶앞에서 함께 공부한내용은 제외합니다.◀
6. 캡슐화 : 정보 은닉, 메소드를 통해 외부에서의 접근
interface SuperCar{}
class WideBus(licencePlate: String,private var routeNumber: String, departure: String, arrive: String) :
Bus(licencePlate, departure, arrive),SuperCar {
override fun departure() {
super.departure()
}
fun information(){
println("바뀐 노선번호는 $routeNumber 입니다.")
}
}
fun main() {
val seoulToBusanBus = ExpressBus("21가 3683", "서울", "부산")
val seoulToChunanBus = WideBus("35가 3683","M6000", "서울","천안")
seoulToChunanBus.routeNumber = "M9000"
}
1) 정보 은닉(캡슐화 되었다.)
간단하게 변수 앞에 private를 붙여주면 해당 클래스 외부에서 private이 붙은 변수로 접근이 불가능하다.
ㄱ. 위 코드에서 WideBus의 변수중 var routeNumber 변수에 private를 붙여줬다.
ㄴ. 그로 인해 main함수에서 seoulToChunanBus의 routeNumber변수를 불러올 수가 없다.
ㄷ. 그 결과 routeNumber의 값을 M9000으로 초기화 시킬 수 없다.
ㄹ. 왜냐하면 private으로 인해 정보가 은닉 되었기 떄문이다.
2) 메소드를 통해 외부에서의 접근(캡슐에서 은닉된정보를 빼오는 방법)
:위 에서 private로 인해 정보가 은닉되었기 때문에 WideBus클래스 외부에서 private var routeNumber변수를 불러올 수 없다.
interface SuperCar{}
class WideBus(licencePlate: String,private var routeNumber: String, departure: String, arrive: String) :
Bus(licencePlate, departure, arrive),SuperCar {
override fun departure() {
super.departure()
}
fun getrouteNumber():String{
return routeNumber
}
fun setRouteNumber(newRouteNumber: String) {
routeNumber = newRouteNumber
}
fun information(){
println("바뀐 노선번호는 $routeNumber 입니다.")
}
}
fun main() {
val seoulToBusanBus = ExpressBus("21가 3683", "서울", "부산")
val seoulToChunanBus = WideBus("35가 3683","M6000", "서울","천안")
println("노선번호는 $seoulToChunanBus.getrouteNumber()")
seoulToChunanBus.setRouteNumber("M9000")
seoulToChunanBus.information()
val cityBus = CityBus("35가 2306", "999", "강남", "논현")
val terminal = arrayListOf<Bus>(seoulToBusanBus,seoulToChunanBus,cityBus)
terminal.forEach{it ->
it.engineStarart()
it.departure()
}
}
ㄱ. 메소드를 통하여 외부에서 은닉된 클래스에 접근이 가능하다.
ㄴ. WideBus클래스 내부에 선언된 getrouteNumber 함수는 단순히 클래스 외부에서 데이터를 읽기만 가능하다. 위 코드에서 보면 처음에 main함수에서 routNumber 값을 M6000으로 초기화 시켜주는데, 그 값을 변경할 수 없다는 말이다.
ㄷ. 도대채 이게 무슨말이냐면 main함수에서 println("노선번호는 $seoulToChunanBus.getrouteNumber()") 이 부분이 일기만 가능하다는 뜻인데, 즉 print만 가능하단소리다.
ㄹ. Wide클래스의 private var routNumber변수를 수정까지 하기위해서는 다른 함수를 이용해야하는데, 난 setRouteNumber라고 이름 지어줬다.
ㅁ. 그리고 main함수에서 보다시피 seoulToChunanBus.setRouteNumber("M9000") 이런식으로 setRouteNumber() 함수를 이용해서 은닉된 private var routeNumber값을 수정해 줄 수 있었다.
★이상 4탄으로 객체지향프로그램(OOP)공부를 마치도록 하겠습니다.★
'TIL, WIL(일기)' 카테고리의 다른 글
23.08.22 3탄 registerForActivityResult (2) | 2023.08.22 |
---|---|
230821 SNS앱 만들기 프로젝트를 마무리하며 (4) | 2023.08.21 |
230810 3탄.객체지향프로그램(OOP) (0) | 2023.08.11 |
230810 2탄.객체지향프로그램(OOP) (0) | 2023.08.10 |
230809 1탄.객체지향프로그램(OOP) (0) | 2023.08.09 |