나미/안드로이드

코틀린으로 앱개발까지.. 8. 클래스와 생성자(class, constructor)

규남 2023. 10. 19. 17:31
반응형

정말 기초부터 혼자 공부하면서 같이 정리해나가는 정리노트

1. class

  • 클래스란?
    • 객체지향 프로그래밍(OOP)에서 특정 객체들을 생성하기 위한
    • 틀 안에 들어가는 멤버는 생성자, 변수, 함수, 클래스 등으로 구성됨
  • 클래스를 사용하는 이유 중 하나는 틀만 만들어져있고 실제사용시 메모리 영역에 올려서 씀
  • 따라서 실행됨과 동시에 메모리를 모두 사용하는것과 성능 및 속도에서 차이가 난다
  • 상속이라는 개념을 가지고 있으며, 여러 곳에서 해당 클래스를 가져다가 사용하기 용이
class User
{
    var name ="Lee"
    
    fun getName()
    {
        println("name = $name")
    }
    
    class Test {}
}

fun main()
{
    // 틀만 있던(선언만) User 클래스를 user라는 이름으로 실제 메모리에 생성
    var user = User()
    
    // 생성된 user 클래스 내부에 name을 호출
    println("user name = ${user.name}")
    
    // user 클래스 내부의 함수를 호출
    user.getName()
    
    // User 클래스 내부의 Test 클래스를 test로 생성
    var test = User.Test()
}

 

2. constructor (생성자)

  • 클래스를 생성할때 위에 예제와 같이 생성자가 없는 경우는 클래스명() 으로 생성이 가능
  • 생성자 constructor가 있는 경우는 생성시 생성자 규칙에 맞춰 입력해줘야 함
  • 생성자에는 주 생성자와 보조 생성자의 개념이 존재한다
    • 주 생성자는 constructor 키워드를 통하여 선언하며 생략도 가능하다
    • 주 생성자는 class 클래스명 constructor() {} 형식을 가진다
    • 주 생성자는 클래스 선언과 동시에 진행되며, 하나밖에 선언할 수 없다
    • 주 생성자의 본문 영역은 init 키워드로 영역지정이 가능하다
    •  
    • 보조 생성자는 class 내부 본문안에 constructor 키워드를 이용하여 선언
    • 보조 생성자의 경우 여러개를 선언할 수 있다
class User constructor(name : String)
{
    var Mname = name
}

class  User2(name : String)
{
    var Mname = name

    init
    {
        println("init OK")
    }
}

class User3
{
    constructor(name : String)
    {
        println("constructor(name) = $name")
    }
    
    constructor(name : String, age : Int)
    {
        println("constructor(name , age) = $name, $age")
    }
}

fun main()
{
    // User 클래스의 주 생성자에 의해서 해당 조건의 매개변수를
    // 포함하여 생성해 주어야 한다.

    var user = User("Kim")

    // 주 생성자 constructor는 생략가능
    // init 영역의 지정으로 주 생성자 영역이므로 user2 생성과 동시에
    // init OK가 출력된다
    
    var user2 = User2("Lee")
    println("user2 name = ${user2.Mname}")
    
    // 보조 생성자는 여러개를 선언할 수 있다
    // 보조 생성자의 경우 매개변수에 따라 자동으로 선택되어
    // 해당 constructor에 맞춰서 출력이 된다.
    
    var user3 = User3("Hong")
    var user4 = User3("Park", 10)
}

 

728x90
반응형