본문 바로가기
Programming/Kotlin

[Kotlin] 코틀린 뽀개기 - 객체지향의 핵심 '캡슐화'

by 코딩의성지 2019. 12. 1.

하이~~!! 오늘은 객체지향 언어를 공부하는 사람이라면 꼭 알아야할 내용인 캡슐화에 대해 공부해보려한다.

 

캡슐화없는 객체지향은  앙꼬 없는 찐빵이다. 갑자기 찐빵이 먹고싶다.

 

캡슐화

 

클래스에는 변수를 선언해서 사용할 수 있다고 했다.

 

그런데 만약 이 변수에 모든 사람들이 자유롭게 접근해서 수정할 수가 있다면? 이건 큰 위험요소이다.

 

그래서 우리는 이러한 변수룰 외부에서 직접 접근하는 것을 막고 (private) , 

메서드를 통해 변수의 값을 설정 (setter) 하거나 변수의 값을 리턴 (getter) 하게 해줘야한다.

 

이 과정을 바로 캡슐화라고 한다.

 

이렇게 말해놓으니깐 좀 어려운 것 같다. 아주 쉽게 설명한번 해주겠다.

 

내가 갑자기 감기에 걸렸다. 캡슐로 된 감기약을 먹었다. 우리는 이 감기약 안에 어떤 성분이 들었는지 알지 못한다. 하지만 이 약을 먹으면 감기가 낫는다는 것은 안다. 이게 바로 캡슐화의 핵심 개념이다. ㅎㅎ

 

이 정도 했으면 캡슐화를 충분히 이해했다고 생각하고 예제를 통해 공부해 보도록 하겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
fun main(args : Array<String>) {
    var tempClass = EncapsulationTestClass()
 
    tempClass.intValue = 100
    println(tempClass.intValue)
 
    tempClass.strValue = "IT 알려주는 은행원"
    println(tempClass.strValue)
}
 
class EncapsulationTestClass {
 
    // 외부의 접근을 막기위해 private 키워드를 꼭 사용해줘야함함
    // private 를 사용할시 값을 꼭 초기화 시켜줘야함
    private var memIntVar = 0
    private var memStrVar = ""
 
    var intValue : Int
        set(memIntVar) {
            this.memIntVar =memIntVar
        }
        /*
        get() {
            return this.memIntVar
        }*/
        get() = this.memIntVar
 
    var strValue : String
        set(memStrVar) {
            this.memStrVar = memStrVar
        }
        get() {
           return this.memStrVar
        }
}
 

자바랑은 좀 다르다. 자바의 getter & setter는 실제 메서드를 호출하는 거였는데, 코틀린에서 getter & setter 는 마치 변수에 값을 할당하고 사용하는 것처럼 보인다. get() 같은 경우에는 사용하는 방식이 위에서 보여지는 것처럼 두 가지가 있다.

 

get() 이 단지 멤버변수를 리턴해주는 역할만 한다면  get() = this.memIntVar 이런 방식으로 사용하는 것도 좋은 생각이다.

 

위의 소스를 실행해보면 ..!

 

이런 결과가 나온다 ㅎㅎ

 

자 ! 오늘 getter & setter 까지 배웠으니 이제 코틀린 좀 사용할줄 안다고 말해도 될 것 같다.

그래도 열심히 복습하고 공부하는 걸 게을리 하지말자. 그럼 오늘도 즐거운 코딩하자 !

 

반응형

댓글