파라미터, 인자, 생성자, 프로퍼티 비교

pnlkc·2023년 3월 7일
3
post-thumbnail

파라미터? 인자? 생성자? 프로퍼티?


코틀린을 공부하다 보면 인자(Argument), 파라미터(Parameter, 매개변수), 생성자(Constructor), 프로퍼티(Property)라는 용어가 자주 등장합니다.

하지만 저 용어들의 개념이 정확히 잡혀있지 않아 어느 상황에서 어떤 용어를 쓰는게 올바른 것이지 헷갈리는 경우가 많아 정리해보려고 합니다.




인자와 파라미터


인자파라미터는 함수를 통해 쉽게 이해할 수 있습니다.

	fun main() {
    	// 100, 200은 add() 함수의 인자입니다
    	val result = add(100, 200)
    }
    
    // a, b는 add 함수의 파라미터입니다
    fun add(a: Int, b: Int): Int {
    	return a + b
    }

즉, 파라미터는 함수나 클래스의 선언부에 있는 변수를 의미하고, 그것들을 호출할 때 인자를 파라미터로 전달하여 사용하는 것입니다.




프로퍼티


프로퍼티는 클래스(Class)나 객체(Object)의 속성을 나타내는 변수나 상수를 의미합니다.

코틀린에서는 일반적으로 varval을 이용해서 변수를 선언하고 이 변수들이 프로퍼티입니다.

// name과 age는 Person 클래스의 프로퍼티입니다.
class Person {
    var name: String = "홍길동"
    var age: Int = 20
}

프로퍼티에 대해 더욱 자세히 알고 싶으시면, 자바의 Field 개념과 코틀린의 프로퍼티 개념을 같이 공부하시면 됩니다.




생성자


생성자는 클래스에서 사용하는 개념입니다.

// 코드1

class Person(val name: String, val age: Int) {
	... (생략) ...
}

fun main() {
	val person = Person("홍길동", 20)
}

위 코드를 설명하면,
Person 클래스는 name과 age라는 두 개의 프로퍼티를 가지고 있고, name과 age라는 프로퍼티를 생성자의 파라미터로 선언하고 있는 것입니다.
때문에 Person 클래스의 인스턴스를 생성할 때 반드시 name과 age에 해당하는 인자를 전달해야 합니다.


// 코드2

class Person(val name: String, val age: Int)

class Person constructor(val name: String, val age: Int)

일반적으로 코틀린에서는 위의 코드처럼 생성자를 생략해서 사용하기 때문에 위의 코드가 더 익숙하겠지만 두개의 코드는 동일한 코드입니다.

때문에 코드1을 설명할때 name과 age라는 프로퍼티가 생성자의 파라미터라고 한 것입니다.

이렇게 클래스의 선언과 동시에 함께 정의되는 생성자를 기본 생성자(Primary Constructor)라고 부릅니다.

생성자에는 기본 생성자뿐만 아니라 클래스 내부에 정의할 수 있는 보조 생성자(Secondary Constructor)도 있습니다.


// 코드3

// name과 age를 파라미터로 가진 기본 생성자입니다.
class Person(val name: String, val age: Int) {
	
    // name만 파라미터로 가진 보조 생성자입니다.
    constructor(name: String) : this(name, 0)
}

위의 코드에서 constructor(name: String) : this(name, 0) 이 부분이 보조 생성자입니다.

보조 생성자 내에서는 this 키워드를 사용하여 기본 생성자를 호출하고, 인자로 name을 전달하고 있습니다. 이를 통해, 보조 생성자에서도 name을 초기화할 수 있게 됩니다.

위의 예시처럼 보조 생성자 내부에서 기본 생성자를 호출하는 경우 반드시 기본 생성자의 파라미터 형식을 그대로 전달해야 합니다.

profile
안드로이드 개발 공부 블로그

0개의 댓글