일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- annotation
- 스프링 log
- JPA Lock
- JPA
- Inno DB
- Android
- 서버개발캠프
- JPA 동시성
- Transaction isolation level
- Pessimistic Lock
- 안드로이드
- JPA 낙관적락
- 디자인 패턴
- 낙관적락 비관적락 차이
- 스마일게이트
- spring
- 암호화
- Optimistic Lock
- bean
- spring security 인증
- component
- 스프링
- flask
- 스프링 로그
- 캠프
- 개발
- 서버
- JPA 비관적락
- spring security
- Redis
- Today
- Total
모르는게 많은 개발자
[Kotlin] 클래스 선언 본문
코틀린 언어가 안드로이드 공식언어로 채택된 현재 자바로만 안드로이드 개발을 하면 안될 것 같아 코틀린을 공부하고 있다.
앞으로 코틀린의 문법을 계속 포스팅할 계획이다. 오늘은 클래스 구조와 선언 방법을 포스팅 하려 한다.
1. 클래스 기본 구조
class Person constructor() {
}
코틀린 코드의 기본적인 구조이다. 자바랑 비교했을 때 다를 바 없어보이지만 Person옆에 constructor( ) 있다는게 다르다는 것을 알 수 있다. 뜻 그대로 constructor( )를 통해 생성자를 정의 할 수 있다. 즉, ( )안에는 변수들이 들어갈 수 있다.
//constructor 생략 가능
class Person(var a:String, val b:Int) {
}
이런식으로 생성자의 인자를 정의할 수 있다. 인자의 의미는 a라는 이름의 String 변수와 b라는 Int 변수를 인자로 받겠다라는 뜻이다.
아마 지금 var와 val의 의미가 궁금할 것이다.
- var : 수정 가능한 변수
- val : Java의 final처럼 수정이 불가능한 변수
class Person(a:String, b:Int) {
}
이런식으로 변수앞에 var, val를 선언하지 않으면 기본적으로 val로 선언된다.
2. 클래스 생성자
만약, 생성자를 2개이상 만들고 싶을땐 어떡할까?
class Person(a:String, b:Int) {
constructor(a:String) : this(a, 10) {
//Todo
}
}
constructor라는 키워드를 사용해 새로운 생성자를 생성할 수 있다. 하지만 사용할 때 this를 사용해 상위 생성자를 호출해줘야한다.
- 클래스 이름 옆에 선언된 생성자를 Primary Constructor
- constructor 키워드를 사용해 만든 생성자들을 Secondary Constructor
class Person(a:String, b:Int=10) {
}
//Person("asd", 0) -> a=asd b=0
//Person("awd") -> a=awd b=10
또 다른 방법으로 Primary Constructor에 default값을 줘서 여러개의 생성자로 객체가 생성가능하게 할 수 있다.
3. init
Primary Constructor의 인자들을 초기화등 실행문을 하고 싶을때는 init 키워드를 사용한다. init 키워드는 여러번 선언할 수 있다.
class Person(var a:String, b:Int) {
init{
println("$a 1\n")
}
init{
println("$b 3\n")
}
init{
print("2\n")
}
}
Person("asd",1) 객체 생성시
결과
asd 1
1 3
2
결과를 보면 객체 생성시 위에서부터 init이 차례대로 실행되는 것을 볼 수 있다.
4. 메소드(fun)
클래스에 안에 method를 정의하는 방법을 알아보자.
class Person(var a:String, b:Int) {
var c:String = ""
var d:Int = 0
init {
c = a
d = b
}
fun prt() {
println("$a$b$c$d") //b를 출력하는 것에서 오류 발생!!
//var, val를 선언안한 생성자 변수는 객체의 변수가 되지 않기 때문에 사용 불가
}
}
메소드는 fun이라는 키워드를 통해 정의한다.
근데 여기서 중요한건 이 코드는 오류가 난다는 것이다. 생성자의 변수 b가 prt()에서는 사용할 수 없다.
왜냐하면 코틀린은 생성자 변수에 var, val을 선언해주면 생성자 변수가 객체의 변수가 되기 때문에 method에서 사용가능하지만 아무것도 선언하지않으면 위에 말했듯이 val로 선언되나 객체의 변수가 되지 않기 때문에 prt()에서 사용할 수 없다.
'코틀린' 카테고리의 다른 글
[Kotlin] 코틀린 문법 총정리 (5) | 2020.04.24 |
---|