[프로그래밍 기초 문법] kotlin - 메소드, 클래스, 생성자

이도연·2023년 7월 28일
0

기초 문법

목록 보기
1/10

1. 메소드 설계

fun 메서드이름(변수명:자료형, 변수명:자료형 ....) : 반환자료형 {
		소스코드 로직
}

.
.

fun main() {
    var myMathScore = readLine()!!.toInt()
    
    var myRank = checkRank(myMathScore)
    println("나의 등급은 : ${myRank}")
}

fun checkRank(score:Int) : String {
		return when(score) {
			in 90..100 ->	return "A"
			in 80..89 -> return "B"
			in 70..79 -> return "C"
			else -> return "D"
		}
}

.
.
main 메소드에서 myMathScore 변수에 입력값을 정수로 받는다.
checkRank(myMathScore)는 결국 값이 된다.

변수 myRank에서 checkRank 메서드를 호출하며 파라미터로 숫자 요구한다.

checkRank 메서드의 score 변수에 점수를 넘겨주면 checkRank는 비교 코드 실행.
.
.
.
.
.

2. 클래스 설계

2-1. 클래스 구조

class 클래스이름 {
	  정보1
		정보2

		행위1
		행위2
}

.
.

2-2. 데이터 클래스 (data class)

data class 클래스이름 {
			정보1
			정보2
}
data class Menu(val num:Int, val name: String, val price: Int)
  • property 만 가지고 있는 클래스
  • 기본 생성자에 1개 이상의 매개 변수가 변수나 상수로 존재해야함
- hashCode(): 객체를 구분하기 위한 고유값을 리턴
- eauals(): 동일한 객체인지 비교 후 true 또는 false를 리턴
- copy(): 현재 객체의 모든 정보를 복사 후 새로운 객체를 리턴
- toString(): 현재 객체의 모든 정보(프로퍼티)를 출력
- getXXX()/setXXX(매개변수): 변수의 값을 리턴하거나 설정

.
.

2-3. 실드 클래스 (sealed class)

sealed class 부모클래스 {
	class 자식클래스1 : 부모클래스생성자
	class 자식클래스2 : 부모클래스생성자
}
  • 상속받을 수 있는 자식클래스들을 미리 정의
  • 무분별한 상속 방지
  • 컴파일 시점에 생성할 수 있는 자식을 알 수 있어, 효율적으로 다형성 구현
    .
    .

2-4. 오브젝트 클래스 (object class)

  • java의 static 기능
  • 프로그램 실행 동시에 인스턴스화

.
.
.
.
.

3. 생성자

  • 클래스를 실체화할때 최초로 실행할 로직 작성
  • 주생성자와 부생성자로 구분
    .
    .

3-1. init (주 생성자)

  • 클래스 선언부분에 정의되는 생성자
  • 클래스의 프로퍼티를 초기화하고, 초기화 블록 통해 클래스 인스턴스가 생성될 때 실행
fun main() {

}

// 클래스 선언부에 생성자를 명시함
class Character(_name:String, _hairColor:String, _height:Double) {
    var name:String = ""
    var hairColor:String = ""
    var height:Double = 0.0

		// 매개변수를 직접 넘기지않음
    init {
        println("파밍 완료!")
    }

    fun autoHunt() {
        println("자동사냥중")
    }
    fun compositing(device1:String, device2:String): String {
        var device3 = device1 + device2
        println("새로운 무기인 ${device3}입니다")
        return device3
    }
}

Character 클래스는 캐릭터의 이름, 머리카락 색상, 키를 나타내는 세 개의 프로퍼티(name, hairColor, height)를 설정했다.

.
.
.

  • 주생성자
class Character(_name: String, _hairColor: String, _height: Double) {
     ...
}

주생성자는 클래스명 뒤 괄호 안에 파라미터들을 가지며, 프로퍼티 초기화에 사용 (init 블록 사용하여 초기화)
.
.
.

  • 프로퍼티
var name: String = ""
var hairColor: String = ""
var height: Double = 0.0

주 생성자의 파라미터 이름과 동일하게 선언하였으며 외부에서 접근 가능.

.
.
.

  • 초기화 블록
init {
    println("실행 완료!")
}

init은 주 생성자로 객체가 생성될 때 자동으로 호출된다.
매개변수가 없는 생성자의 경우, 객체가 생성될 때 이 블록이 실행된다.

.
.
.

  • 함수
fun autoHunt() {
    println("자동사냥")
}

fun compositing(device1: String, device2: String): String {
    var device3 = device1 + device2
    println("새로운 무기인 ${device3}입니다")
    return device3
}

fireBall() 은 "자동사냥"을 출력하는 단순한 함수입니다.

compositing 함수는 두 개의 문자열 파라미터(device1과 device2)를 받고, 두 파라미터를 합친 새로운 문자열을 반환한다. "새로운 무기인 [device3]입니다" 출력.

이 함수들은 Character 클래스의 인스턴스에 의해 호출된다.

.
.
.

  • 실행 함수
fun main() {
    val character = Character("byurin", "Black", 160.5)
    character.autoHunt()
    val newWeapon = character.compositing("Assault gun, ", "bullet")
}

Character 클래스의 객체 생성, 함수를 호출한다.
main 함수에서 Character 클래스의 객체를 생성.
autoHunt 함수와 compositinig 함수를 호출.

.
.
.

3-2. constructor (부생성자)

  • 클래스 본문에 정의되는 생성자
  • 주생성자와 달리 프로퍼티를 초기화하지 않고, 추가적인 로직을 수행하는데 사용
	fun main() {
    	val character = Character("byurin", "Black", 160.5)
        character.autoHunt()
        val newWeapon = character.compositing("Assault gun, ", "bullet")

  }
  	
  class Character {
      var name:String = ""
      var hairColor:String = ""
      var height:Double = 0.0

      // 명시적 생성자 (Constructor)
      // _name, _hairColor, _height와 같이 생성자에 변수를 넘기는 경우에 사용함
      constructor(_name:String, _hairColor:String, _height:Double) {
          println("${_name}을 생성자로 넘겼어요")
          println("${_hairColor}를 생성자로 넘겼어요")
          println("${_height}를 생성자로 넘겼어요")
      }

      fun autoHunt() {
          println("자동사냥")
      }
      fun compositing(device1:String, device2:String): String {
          var device3 = device1 + device2
          println("새로운 무기인 ${device3}입니다")
          return device3
      }
  }
  • 부생성자(constructor)

생성자를 명시적으로 선언했다.
생성자는 클래스의 인스턴스가 생성될 때 호출되는 특별한 함수로, 객체를 초기화한다.
위 생성자는 _name, _hairColor, _height

라는 세 개의 파라미터를 받고, 객체가 생성될 때 생성자가 호출되며, 생성자의 본문에 있는 내용이 실행된다. 현재의 생성자는 파라미터로 전달된 값들을 출력하기만 한다.

.
.
.
.
.

0개의 댓글