클래스 & Lv3, 4 과제

JENNA·2023년 12월 7일
0

상속

// 부모 클래스
open class Car(val fuelType: String) {
    fun drive() {
        println("Car is driving.")
    }

    fun stop() {
        println("Car has stopped.")
    }
}

// 자식 클래스: SportsCar
class SportsCar(fuelType: String, val turbo: Boolean) : Car(fuelType) {
    fun turboBoost() {
        if (turbo) {
            println("Turbo boost activated!")
        }
    }
}

// 자식 클래스: Truck
class Truck(fuelType: String, val cargoCapacity: Int) : Car(fuelType) {
    fun loadCargo(weight: Int) {
        if (weight <= cargoCapacity) {
            println("Cargo loaded.")
        } else {
            println("Exceeds cargo capacity.")
        }
    }
}

// 메인 함수
fun main() {
    // Car 클래스의 인스턴스 생성
    val myCar = Car("Petrol")
    myCar.drive()
    myCar.stop()

    // SportsCar 클래스의 인스턴스 생성
    val mySportsCar = SportsCar("Petrol", turbo = true)
    mySportsCar.drive()
    mySportsCar.turboBoost()
    mySportsCar.stop()

    // Truck 클래스의 인스턴스 생성
    val myTruck = Truck("Diesel", cargoCapacity = 1000)
    myTruck.drive()
    myTruck.loadCargo(500)
    myTruck.stop()
}


쉬운 코드

// 부모 클래스 = open으로 시작하기
open class Animal {
    open fun sound() {
        println("Some sound")
    }
}


// 자식 클래스 = 상속받을 때 (:)으로 받기
// class Dog에 부모 클래스인 Animal 상속

class Dog : Animal() {
    override fun sound() {
        // 부모 클래스의 sound() 메서드를 오버라이딩
        println("Bark")
    }
}


// 메인 함수
fun main() {
    val myDog = Dog()
    myDog.sound() // "Bark" 출력
}



Lv3 (상속 아님)

-객체를 주입해요
: 이 calc 안에서 만들x, 다른 곳에서 만든 객체를 매개변수로 주입 받아라

fun main() {                                        //@1
    val calc = Calculator()
    println("1 더하기 2 결과는 : ${calc.addOperation(AddOperation(), 1, 2)} 입니다")   //@3
}



class AddOperation{    //#1
    fun operate(num1: Int, num2: Int): Double =  //#2
    (num1+num2).toDouble()
}

//..빼기, 곱하기, 나누기도 있어야 하는데 일단 헷갈리니까 뺌


class Calculator {                          //@2.
    fun addOperation(operation: AddOperation, num1: Int, num2: Int): Double {              //@4.
        return operation.operate(num1, num2) //#3
    }              //@5.
}
*/

1) Operation에 대한 class 만들기

2) 이 class 안에는 method - operate 라는 method가 있는데, 얘들은 num1,2를 parameter로 받아서 Double이라는 애를 return해주는 method

AddOperation이라는 class안에 들어있는 것
[
class AddOperation {
fun operation(num1: Int, num2: Int): Double {
return result = (num1, num2).toDouble()
return result}
}]
=> operate라는 메소드를 실행하면 매개변수로 num1, num2를 받아서 double 타입으로 result에 넣어줌

3) Calculator라는 class, 여기에 addOperation이라는 function이 있는데, 거기에 operation이라는 property를 받는데, 걔 타입이 위의 AddOperation 클래스 타입. 그리고 int 2개(num1, num2) 받음. Double을 return 해줌. return으로 그 operate 안에 있는 operation을 실행해서 return


@1) main에서 Calculator라는 class 생성

@2) Calculator라는 instance가 생성되겠지 (class Calculation) -> 그럼 @1의 calc는 @2의 addOperation을 부를 수 있음 = 이렇게 Calcultor라는 객체를 형성한 calc라는 이름을 가진 애를 만들었음

@3) 거기다가 ${calc.addOperation(AddOperation)} 아래의 addOperation 불러

@4) addOperation 여기 매개변수에 3가지가 들어가야 함
(AddOperation 객체 타입에 operation 들어가/ num1/ num2들어가야 됨)

*객체를 주입한다 = addOperation이라는 메소드를 부를 때 배개변수로 AddOperation이라는 객체를 집어넣음 (AddOperation()괄호열고닫앗으니 instance를 생성한다는 의미)

class Calculator에 class AddOperation이라는 객체가 들어옴

@5)

3번 return을 봐, operation은 2번의 AddOperation이니까 2번 operate를 실행해야 함. num1, num2를 매개변수로 넘김 -> 2번 실행되면 result로 반환함 -> 그걸 3번의 return이 받음 -> 3번의 return은 1번 'println("1더하기 ~~ : ${calc.addOperation(~~)})'의 addOperation에 응답을 줌 (실행된다)

fun main() {
val calc = Calculator()
println("1 더하기 2 결과는 : ${calc.addOperation(AddOperation(),num: 1,num: 2)} 입니다")
}

-> calculator에서 addOperation이라는 함수를 부른다. 그래서 세번째 단락이 나옴
그 안에 매개변수로 3개를 넣을 건데,
첫 번째) class AddOperation이라는 객체를 넣을 거고
두 번째) num1
세 번째) num2

여기서 특이한 건 첫 번째로 넣은 매개변수가 2번클래스라는 것임

우리 근데 AddOperation, SubstractOperation, MultiplyOperation, DevideOperation 있잖아 그래서 저 1main에 저기 안에 바꿔줘

//Lv 4.

abstract class AbstractOperation {
    abstract fun operate(num1: Int, num2: Int): Double
}

class AddOperation : AbstractOperation() {
    override fun operate(num1: Int, num2: Int): Double = (num1 + num2).toDouble()
}

class Calculator(private val operation: AbstractOperation) {
    fun operate(num1: Int, num2: Int): Double {
        return operation.operate(num1, num2)
    }
}

fun main() {
    val calc = Calculator(AddOperation())
    println("1 더하기 2 결과는 : ${calc.operate(1,2)} 입니다")
}
*/

0개의 댓글