[Java/Kotlin] 함수,변수, 클래스, property

Jay·2021년 1월 13일
0

Java&Kotlin

목록 보기
5/30
post-thumbnail

함수

fun max(a:Int, b:Int) : Int{
	return if(a>b) a else b
}

fun main(args: Array<String>) {
	println(max(1,2))
}

위에서는 코틀린으로 if~else문을 사용하였다.
이를 자바에서 3항 연산자로 표현을 하였었다. 아래와 같이.

public int max(int a, int b){
	return a>b ? a : b
}

expression은 값을 반환하는 형태이고 statement는 아무런 값을 만들지 않는다.

자바에서 이런 모든 제어문이 statement이지만, kotlin에선 반복문을 제외하고는 모두 expression이다.

//if문의 expression
fun max(a:Int, b:Int) : Int = if(a>b) a else b

//type inference를 이용하여 간소화
fun max(a:Int, b:Int) = if(a>b) a else b

type inference를 컴파일러에서 해주기에 return type을 생략할 수 있다.
단, expression 형태의 함수에서만 가능하다.


코틀린에서의 변수

코틀린에서 변수는 반드시 val, var로 시작해야 한다.
이 키워드는 변수의 시작을 알리면서 변수가 immutable type인지 mutable type인지 나타낸다.
따라서 val로 지정된 불변타입 변수는 추후에 값을 변경할 수 없으며, 변경시 compile error가 난다.
java의 final이 val과 유사하다고 보면 된다.

//immutable
val a = "b"

//mutable
var c = "case"

//초기화
val garde : Int
grade = 1

변수도 타입 추론이 가능하다.
초기화 시 값을 할당하지 않는다면? 반드시 type을 명시해야 한다.
이건 나중에 따로 더 자세하게 다뤄야겠다.


Class & Property

코틀린에서 함수나, 변수에 한정자를 명시적으로 나타내지 않으면 모두 public이다.

Property

자바에서 property란, 멤버 변수와 이 멤버 변수의 getter, setter를 의미한다.
코틀린에선 이게 분리된 property를 간단하게 표시할 수 있도록 하는 요소를 가진다.
즉, 멤버 변수를 선언하면 그에따른 getter, setter는 컴파일러가 자동으로 생성해준다.
(코틀린의 특징에서 봤었다)

fun Person(
	val name : String //immutable임으로 컴파일러가 getter만 생성한다.
    var isMarried : Boolean //mutable임으로 컴파일러가 getter/setter 모두 생성한다.
)

fun main(args : Array<String>){
	val person = Person("Bob", true)
    println(person.name)	//실제로 getter
    println(person.isMarried) //실제로 getter	가 불린다.

}

자바에선 person.getName()으로 값을 얻거나 setd을 해야 했지만
코틀린에선 컴파일러가 자동으로 생성해주고 그를 부르기만 하면 된다.

단 "isXXXX"인 이름의 멤버변수의 경우 setter에만 set을 붙이고 getter에는 "isXXX"를 그대로 쓴다.
ex. person.isMarried() / person.setMarried(true)


Custom Property

getter/ setter 특정 구현부에 넣고 싶은 경우가 있다.
이런 경우, 직접 get(), set() 메서드를 구현하여 넣을 수 있다.
그 경우, 아래와 같이 가능하다.

class Rectangle(val height: Int, val width: Int){
	val isSquare : Boolean
    	get() {
        	return height == width
        }
}

fun main(args : Array<String>){
	val rectangle = Rectangle(41,43)
    println(rectangle.isSquare)
}
profile
developer

0개의 댓글