클래스
클래스
자바에서 클래스는 보통 생성자와 get, set 메소드, 그리고 추가적인 메소드를 추가해서 만듭니다.
class ChatData{
private String nickname;
private String message;
public ChatData(String nickname, String message){
this.nickname = nickname;
this.message = message;
}
public String getMessage(){
return this.message;
}
public String getNickName(){
return this.nickname;
}
}
하지만 코틀린은 이 모든 것을 다음 한 줄로 함축할 수 있습니다.
class ChatData(val nickname: String, val message: String)
일반적으로 자바에서는 데이터 필드 값의 보안자를 private로 두고 get, set 메소드를 통해 접근을 제한하게 됩니다. 코틀린에서는 get, set 메소드를 기본적으로 포함하고 있는데, 위 예제에서는 생성자가 변수를 val 로 받고 있으므로 nickname
과 message
는 get 메소드만 가지고, set 메소드는 작동을 하지 않습니다.
fun main(args : Array<String>) {
val data = ChatData("user1234", "HelloWorld")
println(data.message)
// data.nickName = "aaa" // 불가능
}
class ChatData(val nickName: String, val message: String)
>>> HelloWorld
nickName 값을 수정시키고 싶다면 val 대신 var 를 사용하면 됩니다.
fun main(args : Array<String>) {
val data = ChatData("user1234", "HelloWorld")
data.nickName = "aaa"
println(data.nickName)
}
class ChatData(var nickName: String, val message: String)
>>> aaa
만약 완전히 private 로 선언하고 get 메소드 조차 사용하고 싶지 않다면
class ChatData(nickName: String, message: String)
다음과 같이 작성하면 클래스 외부에서 접근이 불가능하게 됩니다.
자바에서는 초기화 코드를 생성자에다가 작성합니다. 하지만 위와 같은 코드들에는 생성자 내부에 코드를 작성할 수 없습니다. 이에 대한 문제는 코틀린에서 다음과 같이 해결합니다.
fun main(args : Array<String>) {
val data = ChatData("user1234", "Hello World");
}
class ChatData(nickName: String, message: String){
init{
println("$nickName said: $message")
}
}
>>> "user1234 said: Hello World"
또한 생성자가 여러개가 필요할 경우도 있을 겁니다.
코틀린은 기본생성자
와 보조생성자
개념이 있습니다.
class ChatData(nickName: String, message: String) {
var age = 0
constructor(nickName: String, message: String, age: Int) : this(nickName, message){
this.age = age
}
}
생성자가 여러개가 필요한 경우는 보조 생성자를 이용하면 됩니다.
보조생성자는 constructor
키워드가 필요하며, 반드시 this() 인 기본 생성자를 호출해야 합니다.
만약 기본 생성자가 아무 것도 받지 않는다면
class ChatData(){
var age = 0
constructor(nickName: String, message: String, age: Int) : this() {
this.age = age
}
constructor(message: String, age: Int) : this() {
this.age = age
}
}
위와 같이 해결을 하거나
class ChatData{
var age = 0
var nickName = ""
constructor(nickName: String, message: String, age: Int) {
this.nickName = nickName
this.age = age
}
constructor(nickName: String){
this.nickName = nickName
}
}
기본 생성자를 여러개로 만들면 됩니다.
위 두 예제의 차이점은 기본생성자가 비어있는 클래스는 ChatData()
로 값을 넘겨주지 않고 인스턴스를 생성을 할 수 있다는 점입니다.
인스턴스를 생성할 때는 다음 두 가지 방법으로 생성할 수 있습니다.
ChatData("user1234", "Hello World", 10)
ChatData(nickName = "user1234", message = "Hello World", age = 10)
ChatData(message = "Hello World", age = 10, nickName = "user1234") // 순서는 상관 없음
짧게 작성하려고 했는데 생각보다 너무 길어졌네요.
프로퍼티에 대한 내용도 너무 길어서 나눠서 올리겠습니다.
다음에는 프로퍼티와 백킹필드, 백킹 프로퍼티에 대해 다루어 보겠습니다.
'IT > Kotliin' 카테고리의 다른 글
코틀린(Kotlin)의 프로퍼티에 대해 알아보자! (0) | 2018.03.04 |
---|---|
코틀린(Kotlin)의 함수와 변수! (0) | 2017.06.19 |
코틀린(Kotlin) 시작하기! (0) | 2017.06.10 |