Class 정의하기
1
2
3
4
5
6
7
8
9
10
|
//클래스 정의하기
class MyClass
//클래스 정의하기
class YourClass{
//멤버 함수
fun printInfo(){
println("YourClass 의 메소드(함수) 호출됨")
}
}
|
cs |
2행 : 클래스 내에 선언된게 아무 것도 없으면 예약어와 클래스명만 작성해 주어도 된다.
5-10행 : 클래스 안에 정의할 것이 있는 경우 { }를 사용해서 클래스 영역을 설정해주고, 그 안에 필요한 내용을 작성해주면 된다.
생성자(Constructors)
[대표 생성자 (Primary Constructor)]
1
2
3
4
5
6
7
8
9
10
11
12
|
//대표(primary) 생성자는 클래스명 우측에 선언하고 생략가능하다.
class OurClass1 constructor(){ //1.대표(primary) 생성자는 클래스명 우측에 선언
}
class OurClass2(){ //2.대표(primary) 생성자 예약어 consturctor 예약어 생략 가능
}
class OurClass3{ //3. 인자로 전달 받을게 없으면 ()도 생략 가능
}
|
cs |
2행 : 대표(primary) 생성자는 클래스명 우측에 선언
6행 : 대표(primary) 생성자 예약어 consturctor 예약어 생략 가능
10행 : 인자로 전달 받을게 없으면 ()도 생략 가능
-예시-
1
2
3
4
5
6
|
//생성자의 인자로 문자열을 전달 받는 생성자
class Car(name:String){ /***/}
fun main(){
var c1=Car("samsung")
}
|
cs |
[생성자 (Constructor)]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Car(name:String){
//String type을 담을 수 있는 필드 선언
var name:String
//초기화 블럭(객체가 생성되는 시점에 무언가 작업할 수 있는 블럭)
init {
println("Car 클래스 init")
//생성자의 인자로 전달 받은 문자열을 필드에 저장
this.name=name;
}
//함수
fun drive(){
println("$name 이(가) 달려요")
}
}
|
cs |
4행 : init{ } 초기화 블럭 으로 객체가 생성되는 시점에 무엇인가 작업할 수 있는 블럭이다.
5행 : kotlin에서는 멤버변수의 값이 자동으로 초기화 되지 않는다. 따라서 반드시 변수 선언시 초기값을 설정해 주거나 init()블럭에서 초기값을 넣어 주어야한다
8행 : 생성자의 인자로 전달된 값은 클래스 내에서 참조 가능하다.
생성자의 인자로 var|val을 선언 하는 것 만으로 위의 긴코드를 짧게 해결할 수 있다.
아래를 살펴보자
1
2
3
4
5
6
7
8
9
10
11
|
class YourCar(var name: String){
/*
var name: String
init {
println("Car 클래스 init")
//생성자의 인자로 전달 받은 문자열을 필드에 저장
this.name=name;
}
*/
}
|
cs |
1행 : var 예약어를 생성자의 인자에 선언해 놓으면 알아서 멤버변수(필드)를 만들어주고, 전달된 값을 필드에 저장도 해준다. (var 로 선언하면 getter, setter가 모두 가능 | val로 선언하ㅏ면 getter만 가능)
[두번째 생성자 정의 하기]
- primary 생성자는 클래스명 옆에 괄호를 붙이거나 생략해서 만들 수 있다.
- 두번째 생성자를 정의하고 싶다면
constructor 예약어를 사용하여 생성자를 정의하고,
primary 생성자를 전달해준다. - 상속받은 클래스가 있다면 super라는 예약어를 사용하여 생성자를 만들어 주면된
예)constructor(name:String):super(){}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class OurCar(){ //Primary 생성자
//property(멤버 변수) 정의
var name:String?=null
//두번째 생성자 정의 하기
constructor(name: String):this(){ //primary 생성자를 호출해야한다.
//property(필드)에 값 대입하기
this.name=name
}
fun drive(){
println("$name 이(가) 달려요")
}
}
|
cs |
7-10행 : 두번째 생성자 정의시 primary 생성자를 호출 해야한다.
또한 전달되는 인자에 var 예약어는 사용할 수 없다.
-결과-
1
2
3
4
5
6
7
|
fun main(){
var c3=OurCar()
var c4=OurCar("그렌저")
c3.drive() //null 이(가) 달려요
c4.drive() //그렌저 이(가) 달려요
}
|
cs |