zooooss

[Kotlin] 코틀린 기초 지식(2) 본문

STUDY/App

[Kotlin] 코틀린 기초 지식(2)

zooooss 2023. 11. 13. 15:25

오늘은 코틀린의 객체 지향 프로그래밍에 대하여 공부해보는 시간을 갖겠습니다!

클래스, 객체, 인터페이스 사용법, scope,데이터 클래스 등에 대해 정리해볼거예요!

 

OOP : 객체 지향 프로그램 언어

대표적인 OOP 언어로는 자바, C#, 코틀린이 있고, 그 외에도 많습니다!

OOP의 5가지 기본 개념은

- 변수와 타입

- 흐름 제어

- 함수

- 컬렉션

- 상속을 포함한 클래스와 객체

가 있습니다!

 

먼저 클래스와 객체에 대해 알아보겠습니다!

Class & Objects

class Person constructor(firstName: String, lastName: String){
// 보조 생성자 constructor는 객체 생성 시 값을 추가하게 해준다. 필수적인 요소는 아니다!
	init{ // 객체가 자동으로 생성! 객체를 시작하기 위해 사용한다!
    println("Person created")
    println("firstName = $firstName and lastName = $lastName")
    //이러면 Kwon Jiwoo가 출력됨!
    }
}

fun main(){
	var mary : Person("Kwon", "Jiwoo")
}

 

클래스의 멤버(Member Variables - Properties)

 

class Person(firstName: String, lastName: String){
var age : Int? = null // 나이에 상관없이 프로그램이 실행되도록
var hobby : String = "watch Netflix'

// Member functions - Methods
fun stateHobby(){
	println("My hobby is $hobby")
}

fun main(){
mary.stateHobby()
}


결과는 My hobby is watch Netflix가 출력됩니다.

 

OPP가 중요한 이유를 깨달을 수 있었습니다!

사용할 수 있는 클래스, 데이터 타입 또는 객체를 위한 청사진을 이제 만들 수 있습니다!

 

//Member secondary Constructor
constructor(firstName: String, lastName: String, age: Int)
	:this(firstName,lastName){
  this.age = age
  println("Initialized a new Person object with " +
  		  "firstName = $firstName and lastName = $lastName and age $age")
  }

 

lateinit이란 ?

나중에 초기화 예정을 의미합니다.

 

fun main(){
	var myCar = Car()
    println("brand is : ${myCar.myBrand}")
    myCar.maxSpeed = -5
    println("Maxspeed is ${myCar.maxSpeed}")
}    

class Car(){
	lateinit var owner : String // 여기서 초기화하지 않고, 나중에 init 함수에서 초기화를 하겠다.
    
    val myBrand: String = "BMW"
    
    get(){
    	return field.toLowerCase()
    }
    
    var maxSpeed: Int = 250
        set(value){
        	field = if(value>0) value else throw IllegalArgumentException("최대속도는 0이하일 수 없습니다")
        }
	
    
    init{
    	this.owner = "Mary"
    }
}

 

변경 가능한 프로퍼티를 정의하고, 값을 설정할 때 호출되는 setter를 커스텀으로 정의합니다.

여기서는 입력된 값이 0보다 큰 경우에만 값을 설정하고, 그렇지 않으면 예외를 던집니다.

 

var myModel : String = "M5"
	private set // 하나의 클래스 내에서만 사용할 수 있다는 것


main문 안에서
println("Model is ${myCar.myModel}")로 호출합니다.

 

여기까지 세터, 게터, lateinit에 대해 알아보았습니다!


 

이제 더 나아가 데이터 클래스에 대해 알아보겠습니다!

 

data class User(val id: Long, var name: String)

fun main(){
	var user1 = User(id:1, name:"Mary")
    
    val name = user1.name
    println(name)
    user1.name = "Mary"
    val user2 = User(id:1, name:"Michael")
    
    println(user1.equals(user2))
    // 또한, 다른 클래스처럼 데이터 클래스에서도 toString 메서드를 사용할 수 있습니다.
    println("User Details: $user1")
    // 또한, copy 함수 : 객체를 다른 곳에 쉽게 복사할 수 있습니다.
    val updatedUser = user1.copy(name="Jennie")
    //이렇게되면, user1은 그대로이지만 updatedUser은 copy되어 Jennie가 출력될 수 있습니다.
    }

 

데이터 클래스란 ?

데이터를 보관하고 해당 데이터를 다루기 위한 메서드들을 자동으로 생성해주는 특별한 종류의 클래스로,

간결한 코드로 데이터를 다룰 수 있습니다.

  • 객체의 비교
  • 객체의 출력
  • 객체의 복사

등의 작업을 간단하게 처리할 수 있습니다!

 

 

여기까지 코틀린의 객체 지향 개념에 대해 공부해보았습니다 ㅎㅎ

 

궁금한 점이나 수정할 점은 언제든지 받아들일 준비가 되어있습니다 :>