본문 바로가기

전체 글96

[Hotel Reservation] 호텔 예약 프로그램 lv.3.0 lv3 1. 메뉴에서 5번을 눌러 조회할 사용자 이름을 입력 받아봐요 2. 조회가 불가능한 사용자 이름을 입력하면 "예약된 사용자를 찾을 수 없습니다." 가 출력돼요 3. 출력이 가능하면 입금, 출금, 내역을 확인할 수 있어요. 수정된 부분 인터페이스를 처음으로 사용해 보았다. 사용하다보니까 abstract랑 인터페이스의 용도 차이를 잘 모르겠어서 추가적으로 공부해 주었다. interface가 내 상황에는 더 적합해 보여서 interface로 코드를 수정해 주었다. 주석 추가해서 가독성이 높아졌다! 클래스랑 인터페이스 부분을 나누어 주었다! lv3 부분을 완성하려 보니 lv1에서 내가 대충 읽고 넘어가서 구현하지 않은 부분이 있었다. 예약 목록을 받을 때 랜덤한 입출금 가격을 받아오는 부분이었다. dat.. 2023. 12. 3.
[Kotlin] abstract vs interface 출처: https://stackoverflow.com/questions/45616548/kotlin-why-use-abstract-classes-vs-interfaces 차이점 abstract 클래스는 상태 즉 데이터 값을 가질 수 있다. 따라서 abstract 클래스는 interface에 반해 생성자, init 블록, field/ property를 가질 수 있다. 클래스는 abstract 클래스 1개만 implement(구현/상속?) 가능하다. 클래스는 여러개의 interface를 implement할 수 있다. 따라서 abstract 클래스는 상태를 구현할 수 있고 interface는 행동을 구현할 수 있다? 오잉.. 근데 아래 링크에 너무 잘 설명 되어 있다.. 유레카 https://velog.io/.. 2023. 12. 3.
[Hotel Reservation] 호텔 예약 프로그램 lv.2.1 수정된 부분 데이터 클래스 사용법 공부 후 적용해 보았다.! (https://occhiolism.tistory.com/43) sortBy 추가 공부하고 적용했다. (https://occhiolism.tistory.com/30) 느낀점 대충 이해하고 넘기면 적용할 때 시간소요가 상당히 많이 되는 것 같다. 한번 공부할 때 예제 여러개 확인 하고 규칙이랑 활용방법을 제대로 익히면 시간은 조금 걸려도 장기전으로 봤을 때에는 시간은 절약하는 방법인 것 같다! 응용 코드가 작동이 안돼니까 답답해서 어제 데이터 클래스든 sortBy 공부하기 너무 싫었는데 차근차근 천천히 보고 이해하고 적용하니까 기분이 너무 좋다 :) package com.example.hotelreservationprogramme fun main.. 2023. 12. 3.
[Kotlin] Data Class Syntax data class CLassName( val data1: String, val data2: Int) 조건 주 생성자에 매개변수가 1개 이상 있어야 한다. 주 생성자의 매개변수가 val 또는 var이어야 한다. 데이터 클래스는 abstract, slealed, open이 될 수 없다. 다른 클래스 확장이 가능하고 인터페이스 적용 가능하다. 데이터 클래스에 들어있는 함수 toString() 객체의 데이터를 출력하기 위해 알아서 문자열로 바꾸어준다. 예를들어 데이터 클래스 가 아래와 같이 정의 되면 data class Cell(var name: String, var roll: Int) fun main() { val p = Cell("Euny", 21) println(p) } 위 클래스가 실행되면.. 2023. 12. 3.
[TIL • 20231202] #12 (안드로이드 2기 본캠프) 📖 Today I Learned 🔮 학습 및 노트 정리 알고리즘: 주말이라 1단계 맨 앞에 있는 문제를 다시 풀어보았다. 전에 풀었던 코드보다 발전된 부분을 찾을 수 있어서 뿌듯했다. 공부하는김에 리스트를 문자열로 바꾸는 문법 공부를 추가적으로 해주었다. 한번 문법 공부를 할 때 대충 이해하고 넘어가지 않고 정확하게 경우를 따져서 사용 방법 및 규칙을 습득해 놓아야 나중에 응용할 때 훨씬 도움이 되는거 같다. 이렇게 안 하면 다른 문제 풀 때에 전에 뭔가 어떤 함수를 사용했던거 같은데 어떻게 사용하는지 기억이 안나서 결국 못풀게 되는 것 같다. (https://occhiolism.tistory.com/40) 아! 그리고 다른 사람들 풀이 보면서 zip()이랑 fold()함수를 봤는데 스윽 봤을 때는 이해.. 2023. 12. 2.
[Hotel Reservation] 호텔 예약 프로그램 lv2.0 lv2 1. 메뉴에서 2번을 눌러 호텔 예약자 목록을 보여줘요. (예시. 1. 사용자: ㅇㅇㅇㅇ, 방 번호: ㅇㅇㅇ호, 체크인: 2023-07-21. 체크아웃: 2023-08-01) 메뉴에서 3번을 눌러 호텔 예약자 목록을 정렬 기능을 사용하여 체크인 날짜순으로 오름차순으로 정렬해 봐요 2. 예약 플로우를 수정해 봐요. 해당 체크인 체크아웃 날짜에 선택한 방 번호를 예약 가능한지 불가능한지 판단하게 변경해 봐요. 3. 예약이 불가능하면 체크인, 체크아웃 날짜를 변경해서 다시 검사해 보는 플로우를 만들어봐요. 수정된 부분 메인 메뉴에서 4번을 누르면 코드가 종료되도록 바꾸어주었다 메인 메뉴 선택 부분의 코드를 if 문에서 when 문으로 바꾸어주었다. 가독성이 높아짐. 호텔 예약 부분에서 입력 받은 고객 .. 2023. 12. 2.
[kotlin] joinToString(prefix, suffix, separator) 리스트를 문자열로 바꾸기 1. List를 문자열로 바꾸기 val numbers = listOf(12, 24, 46, 68, 80) val n1 = numbers.joinToString() // n1: "12, 24, 46, 68, 80" val n2 = numbers.joinToString("") // n2: "1224466880" val watermelon = listOf("수", "박", "수", "박") val w1 = numbers.joinToString() // w1: "수, 박, 수, 박" val w2 = numbers.joinToString("") // w2: "수박수박" 2. 접두사랑 접미사 붙이기 val numbers = listOf(11, 22, 3, 41, 52, 6) val string = numbers.j.. 2023. 12. 2.
[Hotel Reservation] 호텔 예약 프로그램 lv.1.1 수정된 부분 클래스의 주생성자를 정리해주었다! 어차피 클래스 내부에 있는 함수의 매개변수에 값이 들어가기 때문에 장황하게 클래스 주생성자에도 변수들을 표시해 줄 필요가 없었다. try catch문을 이용하여 입력된 값이 정수인지 확인해 줄 수 있는 클래스를 만들었고 모든 readLine()!!.toInt()에 적용시켜 주었다. 코드 분석 각 객체에 단일책임원칙에 따라 한가지 기능을 수행하는 함수를 하나씩 넣었다. 개방 폐쇄 원칙에 따라 작성: - 확장에 열려있다: lv1.0에서 lv1.1으로 수정할 때 ReadLineExceptionInt라는 클래스를 추가하고 원래 있었던 부모 추상 클래스 CheckIfValid에 상속시켰다. ->기존 코드 수정없이 기능 확장을 하였다. - 변경에 닫혀있다: 기능에 변경.. 2023. 12. 2.
[TIL • 20231201] #11 (안드로이드 2기 본캠프) 📖 Today I Learned 🔮 학습 및 노트 정리 알고리즘: 어제 공부한 sort 함수 복습하기 좋은 문제였다. 개인 과제: 호텔 예약 1단계를 풀었다. 추상 클래스, 생성자, 함수, 오버라이딩, 오버로딩 등 전반적으로 복습하는데에 유용했던거 같다. 객체를 통해서 함수를 가져오는게 계산기 과제 할 때까지만해도 좀 헷갈렸는데 확실히 이해한거 같다. 그런데 코드가 너무 길어지고 클래스도 많아지다 보니까 내가 작성한 코드 안에서 내가 헤메고 있다. 전반적으로 파악하고 있기 쉽지 않은거 같다. (https://occhiolism.tistory.com/36) 추가 공부: 인터페이스, 예외처리, 접근제한자, 지연초기화 노트정리를 했다. 또 단일 책임 원칙, 개방-폐쇠 원칙 그리고 의존역전법칙 공부를 했다. 읽.. 2023. 12. 1.
[프로그래머스 • 코틀린] K번째수 #42748 #42748 🎄 Question ? https://school.programmers.co.kr/learn/courses/30/lessons/42748 class Solution { fun solution(array: IntArray, commands: Array): IntArray { var answer = intArrayOf() return answer } } 🧩 Thought Process 새로운 뮤터블 리스트에 주어진 array의 i+1부터 j+1까지 넣기 (인덱스가 0부터 시작함을 고려) 정렬하기 뮤터블 리스트의 k+1번째 인덱스 가져오기 🎀 Answer class Solution { fun solution(array: IntArray, commands: Array): IntArray { var .. 2023. 12. 1.
[Hotel Reservation] 호텔 예약 프로그램 lv.1.0 lv1 과제 1. 사용자가 호텔 예약을 할 수 있는 메뉴를 표시하세요. (번호는 1~6번까지 만들어봐요.) 2. 메뉴에서 4번을 누르면 호텔 예약 프로그램을 종료할 수 있어요 3. 예약 플로우는 성함을 입력받고 방 번호를 입력받고 체크인 날짜를 입력받고 체크아웃 날짜를 입력받아요 4. 1번을 눌러 방 예약을 받을 수 있도록 구현해 봐요 5. 방 번호는 100~999호실까지 존재해요 6. 체크인 날짜는 지금 날짜와 비교해서 이전날짜는 입력받을 수 없고 체크아웃 날짜는 체크인 날짜보다 이전이거나 같을 수는 없어요 7. 입력이 완료되면 임의의 금액을 지급해 주고 랜덤으로 호텔 예약비로 빠져나가도록 구현해 봐요 처음 접근할 때에는 전부다 main function에 넣어서 1단계 로직의 흐름대로 코드를 작성했다... 2023. 12. 1.
[TIL • 20231130] #10 (안드로이드 2기 본캠프) 📖 Today I Learned 🔮 학습 및 노트 정리 알고리즘: sortBy, sortWith 문법 공부를 할 수 있었다. (https://occhiolism.tistory.com/30) 개인 과제: 계산기 만들기 lv2 & lv3 & lv4 (https://occhiolism.tistory.com/32) (https://occhiolism.tistory.com/33) (https://occhiolism.tistory.com/34) lv2 수정은 심플하게 생각하니까 금방 되었고 lv3는 문법을 제대로 체화 시키지 못한 탓에 푸는데 시간이 좀 걸렸다. 상속 개념이랑 클래스 인스턴스화 및 객체 관련해서 조금 더 잘 이해한 것 같다. lv4는 lv3에 시간 투자를 한 덕에 금방 풀 수 있었다. 물론 맞았다는.. 2023. 11. 30.
[Calculator] 계산기 만들기 lv.4 Lv4 : AddOperation(더하기), SubtractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스들을 AbstractOperation라는 클래스명으로 만들어 사용하여 추상화하고 Calculator 클래스의 내부 코드를 변경합니다. Lv3 와 비교해서 어떠한 점이 개선 되었는지 스스로 생각해 봅니다. hint. 클래스간의 결합도, 의존성(의존성역전원칙) lv3를 하면서 상속이랑 클래스 개념을 제대로 익혀서 그런지 상대적으로 시간이 덜 걸렸다. 간단한 추상 클래스 예제를 정독하고 문제를 풀어줬다! 아래 링크 예제 정독만 하면 바로 풀 수 있다 !! https://velog.io/@k906506/Kotlin-%EC%B6%94%EC.. 2023. 11. 30.
[Calculator] 계산기 만들기 lv.3 Lv3 : AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺기 관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경하기 나머지 연산자(%) 기능은 제외합니다. Lv2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다. hint. 클래스의 책임(단일책임원칙) 따로 뺀 클래스 안에 함수 만들 생각을 안해서 시간을 엄청 썼다. 그리고 부모 자식 상속 클래스 쓰려고 애먹었는데 필요 없었음... 대신에 상속 어떻게 사용하는지 제대로 공부한거 같다. 클래스가 여러개 있을 때 해야하는 스텝 정.. 2023. 11. 30.
[Calculator] 계산기 만들기 lv.2.1 인풋에 문제가 있었었는데 숫자 연산자를 따로 입력 받는 방식으로 바꾸니 간단해졌다! 수정한 부분 toCharArray.digitToInt().toDouble()을 이용해서 문자열을 수정했었는데 바로 .toDouble()로 수정할 수 있다는 사실을 배웠다. 인풋 간단히 바꾸었다! package com.example.mycalculator // Level 2 // Lv1에서 만든 Calculator 클래스에 출력 이후 추가 연산을 가능하도록 코드를 추가하고, 연산 진행 후 출력하기 fun main(){ print("숫자를 입력하세요 : ") var number1 = readLine()!!.toDouble() print("연산자를 입력하세요 : ") var operator = readLine()!! print.. 2023. 11. 30.