본문 바로가기

Programming/Kotlin

7. 클래스

7.1 클래스 선언 및 생성

 7.1.1 클래스 선언

   - class MyClass{ }

   - 일반적으로는 파일 안에 파일명과 같은 이름의 클래스를 정의해 사용한다. 하지만 이는 강제 규칙이 아니며 코틀린

     파일에 파일명과 같은 이름의 클래스가 없어도 상관은 없다.

   - 클래스 내에 클래스를 선언해서 이용할 수도 있다.

   - 클래스에는 프로퍼티, 메서드, 생성자, 클래스 등을 선언할 수 있다.

 

 7.1.2 객체 생성

   - 객체 생성은 클래스를 이용하기 위해 메모리를 할당하는 작업이며, 할당된 메모리를 객체명으로 참조하는 개념이다.

 

7.2 생성자

 7.2.1 주 생성자(constructor)

   - 하나의 클래스에 하나만 정의할 수 있다.

   - 꼭 작성해야 하는 건 아니며 보조 생성자가 있다면 작성하지 않을 수 있음

   - 주 생성자는 클래스 몸체가 아닌 헤더에서 클래스 이름 뒤에 선언한다.

   - 만약 주 생성자에 별도의 수식 구문(어노테이션, 접근 제한자 등)이 없다면 constructor 예약어는 생략할 수 있다.

   - 매개변수가 있는 주 생성자 : class Myclass constructor(name:String, age:Int)

   - 일반 함수처럼 생성자의 매개변수에도 기본값을 명시할 수 있다.

   - 생성자 초기화 블록 : 주 생성자는 {}를 가질 수 없다. => 클래스 내부에서 init 예약어로 따로 명시하는 기법을 사용.

   - 생성자의 매개변수는 클래스의 초기화 블록(init)이나 프로퍼티에서는 접근할 수 있지만, 멤버 함수에서는 사용할 수

     없다. 생성자의 매개변수를 프로퍼티에 대입하고 사용하던가, 생성자 내에서 val,var를 이용해 매개변수를 선언한다.

   - 생성자의 매개변수명과 프로퍼티명을 같게 선언할 수 있지만, 초기화 블록은 생성자 매개변수를 이용하고 함수는

     프로퍼티를 이용한다.

   - 매개변수를 var, val로 선언한 경우에는 같은 이름의 프로퍼티가 있으면 컴파일 에러가 발생한다.

 

 7.2.2 보조 생성자

   - 클래스 몸체에 constructor 예약어로 선언한다.

   - 보조 생성자를 선언했으면 주 생성자는 선언하지 않아도 된다.

   - 컴파일러는 주, 보조 생성자 둘 다 선언하지 않았을 경우만 매개변수 없는 주 생성자를 추가한다.

   - 생성자 오버로딩 : 하나의 클래스 내에 여러 개의 생성자를 선언한 상황을 의미한다.

   - 주 생성자는 없고 보조 생성자만 있을때에도 초기화 블록은 객체 생성 때 가장 먼저 실행된다.

   - 보조 생성자 매개변수는 초기화 블록, 함수에서 이용할 수 없다. 보조 생성자 내에서만 사용할 수 있다.

   - 보조 생성자 내의 매개변수는 val, var로 선언할 수 없다. 클래스의 프로퍼터에 대입한 후 사용한다.

 

 7.2.3 this()에 의한 생성자 연결

   - 주 생성자를 선언했다면 보조 생성자는 무조건 주 생성자를 함께 호출해 주어야 한다. 보조 생성자 선언 영역에

     this() 구문을 추가해 주 생성자를 호출한다.

   - 주 생성자를 선언했다면 객체 선언 시 어떠한 경우라도 반드시 주 생성자는 실행되어야 한다.

   - 보조 생성자를 선언했다 하더라도 주 생성자 초울문은 생략할 수 없다.

   - 보조 생성자를 여러 개 선언하면 this()로 보조 생성자를 호출할 수는 있지만, 최종 주 생성자는 호출해야 한다.

 

※ 코틀린에서는 파일 내에 파일명과 같은 public 클래스를 강제하지 않는다.

※ 코틀린에는 new 연산자가 없다.

※ 코틀린의 생성자는 자바와 작성 방법 및 동작 원리가 많이 다르다.

'Programming > Kotlin' 카테고리의 다른 글

9장. 상속  (0) 2020.01.20
8. 프로퍼티  (0) 2020.01.17
6. 흐름 제어 구문과 연산자  (0) 2020.01.13
5. 데이터 타입  (0) 2020.01.13
4. 변수와 함수  (0) 2020.01.10