[kotlin] 객체 프로그래밍 예제

Leechaeyeon·2023년 5월 21일
0
post-thumbnail

1. 자판기 예제

자판기를 구현한다.음료수를 고르세요

  1. 콜라(1000원), 2. 사이다(1000원), 3.커피(1500원), 4.복숭아아이스트(2000원) : 1

만약 그외의 번호를 입력하면.... 다시 입력해주세요 라고 출력하고 위의 메뉴가 다시 나오게 한다.

현재 0원/부족 1000원동전을 넣어주세요 :

500현재 500원/부족 500원

동전을 넣어주세요 :

1000현재 1500원/부족 0원

콜라가 나왔습니다.

잔액은 500원 입니다.


콜라는 1000원이고

양은 300ml 입니다

회사는 코카콜라 입니다.

사이다는 1000원이고

양은 300ml 입니다

회사는 칠성입니다.

커피는 1500원이고

양은 500ml 입니다

회사는 별다방입니다.

복숭아아스티는 2000원이고

양은 700ml 입니다

회사는 빽다방입니다

자판기 클래스

  • 자판기 클래스를 구현
    • 음료의 번호를 입력받는 함수
    • 동전 입력함수
    • 음료수가 나오는 기능함수
    • 번호에 따라 음료수 객체를 생성하여 반환하는 함수

음료수 클래스 ( VendingItem )

  • 음료수 클래스를 구현
    • 생성자로 음료수 이름, 금액, 양, 회사를 입력받는다.
    • 음료수 정보를 출력하는 함수
  • 전체 코드
    import java.util.Scanner
    
    fun main(){
        val scan = Scanner(System.`in`)
    		// 자판기 객체 생성
        val vendingMachine = VendingMachine()
    		// 번호를 입력받는다. 
        val choiceNumber = vendingMachine.inputDrinkNumber(scan)
    		// 음료수 객체를 생성한다. 
        val item = vendingMachine.choiceDrinkItem(choiceNumber)
    		// 동전을 입력받는다. 
        vendingMachine.inputCoin(scan,item)
    		// 음료수가 나온다. 
        item.printItemInfo()
    
    }
    
    class VendingMachine{
    
        // 음료의 번호를 입력받는 함수 반환값으로는 1~4사이의 값을 반환
        fun inputDrinkNumber(scan:Scanner):Int{
            var inputNumber:Int
            while(true) {
                print("1. 콜라(1000원), 2. 사이다(1000원), 3.커피(1500원), 4.복숭아아이스트(2000원) : ")
                inputNumber= scan.nextInt()
                when(inputNumber){
                    in 1..4 -> {
                        break;
                    }
                    else-> {
                        println("잘못된 입력입니다. 다시입력해주세요")
                        continue
                    }
                }
    
            }
            return inputNumber
        }
    
        // 번호에 따라 음료수 객체 생성하는 함수
        fun choiceDrinkItem(number: Int): DrinkItem = when (number) {
            1 -> DrinkItem("콜라", 1000, 300, "코카콜라")
            2 -> DrinkItem("사이다", 1000, 300, "칠성")
            3 -> DrinkItem("커피", 1500, 500, "별다방")
            4 -> DrinkItem("복숭아아이스티", 2000, 700, "빽다방")
            else -> DrinkItem("", 0, 0, "")
        }
    
        // 동전 입력 및 음료수가 나오는 기능
        fun inputCoin(scan:Scanner,item:DrinkItem){
            var lessCoin = item.price
            var inputCoin = 0
            var total =0
            do {
                println("현재 $inputCoin 원 / 부족 $lessCoin")
                print("동전을 넣어주세요 : ")
                inputCoin = scan.nextInt()
                total += inputCoin
                lessCoin -= total
            }while(lessCoin >= 0)
            println("${item.name}가 나왔습니다. \n잔액은 ${-lessCoin}입니다.")
    
        }
    
    }
    
    // 음료수 클래스 구현
    class DrinkItem(val name:String, val price:Int, val amount:Int, val company:String){
        fun printItemInfo(){
            println("""
                $name${price}원 이고 
                양은 $amount ml 입니다. 
                회사는 $company 입니다. 
            """.trimIndent())
        }
    
    }

2. 자동차 공장 예제

자동차공장

생산할 자동차를 선택해주세요
1. 붕붕, 2. 승용차, 3. 버스, 4. 트럭, 0. 생산종료

입력이 완료되면 다음과 같이 출력한다.
총 생산 자동차 수 : 000대
붕붕 : 00대
승용차 : 00대
버스 : 00대
트럭 : 00대

종류 : 붕붕
최대속도 : 300km/h
연료 : 꽃향기
탑승인원수 : 1명

종류 : 승용차
최대속도 : 200km/h
연로 : 휘발유
탑승인원수 : 4명

종류 : 버스
최대속도 : 150km/h
연료 : 가스
탑승인원수 : 50명

종류 : 트럭
최대속도 : 100km/h
연료 : 가스
탑승인원수 : 3명

생산된 자동차들의 평균 속도 : 000km/h
생산된 자동차들의 총 탑승인원수 : 0000명
연료가 꽃향기인 자동차의 수 : 00대
연료가 휘발유인 자동차의 수 : 00대
연료가 가스인 자동차의 수 : 00대

공장 함수

  • 생산할 자동차 종류를 선택하는 함수
  • 생산할 자동차 수를 출력하는 함수
  • 자동차 종류를 출력하는 함수
  • 평균속도 등 여러 값을 구해 출력하는 함수
  • 자동차 객체를 생성하는 함수

차 함수

  • 자동차 정보 : 종류, 최대속도, 연료, 탑승인원 수를 생성자로 받는다.
  • 자동차 정보 출력하는 함수
  • 전체 코드
    import java.util.Scanner
    
    fun main(){
        val carFactory = CarFactory()
        carFactory.selectCarType()
        carFactory.printCarCount()
        carFactory.printCarInfo()
        carFactory.printData()
    }
    
    class CarFactory{
    
        val scanner = Scanner(System.`in`)
        val carList = ArrayList<Car>()
    
        // 생산할 자동차 종류를 선택하는 기능
        fun selectCarType(){
            // 선택한 자동차 번호
            var carNumber = 0
    
            while(true){
                // 자동차 종류 번호를 입력받는다.
                println("생산할 자동차를 선택해주세요")
                print("1. 붕붕, 2. 승용차, 3. 버스, 4. 트럭, 0. 생산종료 : ")
                carNumber = scanner.nextInt()
    
                if(carNumber !in 0..4){
                    println("잘못 입력하였습니다")
                    continue
                }
                if(carNumber == 0){
                    break
                }
    
                // 자동차 객체를 생성한다
                val car = createCar(carNumber)
                carList.add(car)
    
            }
        }
        // 생산한 자동차 수를 출력하는 기능
        fun printCarCount(){
            var boongboongCount = 0
            var basicCarCount = 0
            var busCount = 0
            var truckCount = 0
    
            println("총 생산 자동차 수 : ${carList.size}")
            
            // 자동차의 수 만큼 반복한다.
            for(car in carList){
                when(car.type){
                    "붕붕" -> boongboongCount++
                    "승용차" -> basicCarCount++
                    "버스" -> busCount++
                    "트럭" -> truckCount++
                }
            }
            
            println("붕붕 : ${boongboongCount}대")
            println("승용차 : ${basicCarCount}대")
            println("버스 : ${busCount}대")
            println("트럭 : ${truckCount}대")
            
        }
        // 자동차 종류를 출력하는 기능
        fun printCarInfo(){
            // 자동차의 수 만큼 반복한다.
            for(car in carList){
                car.printCarInfo()
                println()
            }
        }
        // 다양한 값을 구해 출력하는 기능
        fun printData(){
            var speedAvg = 0
            var totalPCount = 0
            var fuelFlowerCount = 0
            var gasolineCount = 0
            var gasCount = 0
    
            var speedTotal = 0
            // 자동차의 수 만큼 반복한다.
            for(car in carList){
                speedTotal += car.maxSpeed
                totalPCount += car.pCount
    
                when(car.fuel){
                    "꽃향기" -> fuelFlowerCount++
                    "휘발유" -> gasolineCount++
                    "가스" -> gasCount++
                }
            }
            // 평균 속도를 구한다.
            speedAvg = speedTotal / carList.size
    
            println("생산된 자동차들의 평균 속도 : ${speedAvg}km/h")
            println("생산된 자동차들의 총 탑승 인원 수 : ${totalPCount}명")
            println("연료가 꽃향기인 자동차의 수 : ${fuelFlowerCount}대")
            println("연료가 휘발유인 자동차의 수 : ${gasolineCount}대")
            println("연료가 가스인 자동차의 수 : ${gasCount}대")
        }
        // 자동차 객체를 생성하는 함수
        fun createCar(type:Int) = when(type){
            1 -> Car("붕붕", 300, "꽃향기", 1)
            2 -> Car("승용차", 200, "휘발유", 4)
            3 -> Car("버스", 150, "가스", 50)
            4 -> Car("트럭", 100, "가스", 3)
            else -> Car("111", 0, "222", 0)
        }
    }
    
    class Car (var type:String, var maxSpeed:Int, var fuel:String, var pCount:Int){
    
        // 자동차 정보 출력
        fun printCarInfo(){
            println("종류 : $type")
            println("최대 속도 : ${maxSpeed}km/h")
            println("연료 : $fuel")
            println("탑승 인원 수 : ${pCount}명")
        }
    }

0개의 댓글