728x90
반응형

Kotlin/StoreInfo 13

우선순위 큐

우선순위 큐(Priority Queue) 이진트리의 형태 오름차순 혹은 내림차순으로 값을 저장 → 기본은 최소 힙 방식이기 때문에 오름차순 트리의 Top을 읽어 최대값이나 최소값을 가질 수 있음 → 들어간 순서와 상관없이 오름차순인 경우에는 최소값, 내림차순인 경우에는 최대값 반환 (자바의 util 패키지를 import 해야한다.) 사용방법 // 선언 val pq = PriorityQueue() // 삽입 pq.add(...) pq.addAll(...) pq.offer(...) // 삭제 pq.poll() pq.remove() // 탐색 pq.contains(...) pq.size pq.peek() 삽입, 삭제 모두 O(logN)의 시간복잡도를 가진다.(부모노드만 비교하며 절반씩 비교하는 횟수를 줄여가기..

Kotlin/StoreInfo 2024.04.12

Stack 간단 구현

스택에 관한 문제를 풀다가 'Kotlin으로는 어떻게 스택을 구현을 해야할까?' 라는 생각이 들어서 방법을 찾아보다가 알게 된 내용을 적어둔다. 먼저 구성은 인터페이스와 클래스로 했다. 함수만 선언한 인터페이스를 클래스가 상속받아 오버라이딩하는 방법이다. 어떤 객체든 담을 수 있도록 제너릭 클래스를 사용했다. 값을 넣고 뺄 수 있는 ArrayList를 사용했다. 필요한 함수가 추가적으로 생긴다면 인터페이스에 함수를 선언하고 클래스에서 오버라이딩하면 된다. 사용할 때는 StackImpl()을 변수 객체에 초기화하면 된다. interface MyStack { fun push(element: T) fun pop(): T? fun peek(): T? } class StackImpl: MyStack { priva..

Kotlin/StoreInfo 2024.04.11

<정리> Scope functions

출처 : https://kotlinlang.org/docs/scope-functions.html 코틀린에는 스코프 함수라는 게 있다. 특정 객체의 컨텍스트 안에서 코드 블록을 실행하기 위한 목적만을 가진 함수라고 한다. 코드를 더욱 간결하게 만들어준다. 스코프 함수 내에서는 객체의 이름을 안 쓰고도 접근이 가능하다. 종류에는 let, run, with, apply, also가 있다. 같은 점은 한 객체에서 코드 블록을 실행한다는 것이고 다른 점은 블록 내에서 컨텍스트 객체를 표현하는 방법과 반환값이 있다. 스코프 함수 객체 참조 반환값 확장함수 여부 let it Lambda result 네 run this Lambda result 네 run - Lambda result 아니요 with this Lambd..

Kotlin/StoreInfo 2023.12.19

<정리> lateinit vs by lazy

늦은 초기화 : 객체 초기화를 늦게 하는 것 클래스 로딩 시간 감소와 미사용 전역변수의 메모리 공간을 줄여주는 효과 lateinit(Late Initialization) var로 변수가 선언 되기 때문에 초기화 이후에도 값을 변경 가능 Nullable하지 않은 변수(Non-null 변수)를 선언은 하는데 초기화는 미루고 싶을 때 사용하는 문법 초기화 제대로 하지 않아도 컴파일 시에는 에러가 발생하지 않음 변수 선언하고 늦은 초기화를 하지 않은 경우 발생하는 에러 : UninitializedPropertyAccessException Primitive Type(Int, Float, Double, Long...)에서는 사용 불가 → Primitive Type을 전역변수로 사용하려면 by lazy를 쓰거나 초기..

Kotlin/StoreInfo 2023.12.18

<정리> 키오스크 프로그램 구현2

오늘은 저번에 안 써놨던 것들만 쓰려고 한다. 오늘로 과제가 마무리되고 제출까지 마쳐서 전체적으로 돌아볼 수 있을 거 같다. 1. 문자열 포매팅 포매팅인지 포맷팅인지는 잘 모르겠지만 지금 끌리는 포매팅으로 말을 이어가자면 생각보다 메뉴들의 길이가 달라서 UI가 예쁘지 않다는 건 튜터님의 피드백 중에 하나이면서 우리 사이에서도 해결해야할 문제로 자리잡았다. 그리고 해결방법을 찾아오셔서 적용시켜준 팀원이 있었기에 해결이 되었다. (그대의 노가다에 감사의 박수를...!!) println(" %-9s\t| %s".format("1. 버거", "다양한 버거")) 보통 이런 형식을 주로 사용했다. 형식문자를 이용하는 건데 %d, %s, %f 다양하게 있다. %와 s 사이에 숫자를 쓰면 해당 문자열이 차지할 총 공간..

Kotlin/StoreInfo 2023.12.08

<정리> 키오스크 프로그램 구현

이번에도 진행하면서 알게된 것들을 적어놓으려고 한다. 1. 정수 판별 어제는 이 부분을 함수를 만들어서 판별했는데 오늘 팀원이 알려준 toIntOrNull 함수로 간단하게 판별할 수 있게 되었다. ?: 연산자까지 넣으니까 when에서 아주 좋았다. 문자를 넣든, 범위를 넣는 값이 들어오든 다 else에서 처리가 되기 때문이다. val check = readln() when (check.toIntOrNull() ?: -1) { 1 -> { orderReceipt.addMenu(chickenInfo[selectedChicken.toInt() - 1]) println("${chickenInfo[selectedChicken.toInt() - 1].name}가 장바구니에 추가되었습니다.\n") break } 2 ..

Kotlin/StoreInfo 2023.12.06

<정리> 호텔 예약 프로그램 구현

현재 진행 중이고 거의 다 마무리가 되가고 있는 호텔 예약 프로그램을 구현하면서 있었던 일들을 적어놓고자 한다. 처음에 했던 버전은 간단히 TIL에 써놨었는데 이후 피드백을 반영한 버전에 대해서 작성해보려고 한다. 전체 코드는 이후에 과제가 마무리되고나서 깃허브에 올려 링크를 걸 예정이다. 전체 코드(깃허브) : https://github.com/heesoo-park/Assignments/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EA%B8%B0%EC%B4%88%EC%A3%BC%EC%B0%A8/Kotlin%20%EB%AC%B8%EB%B2%95%20%EC%8B%AC%ED%99%94%20%EA%B3%BC%EC%A0%9C%20-%20%ED%98%B..

Kotlin/StoreInfo 2023.12.05

<정리> 계산기 구현

이 계산기는 과제로 나온 계산기를 좀더 발전시켜본 버전이다. 물론 OOP를 잘 지켜서 구현하지는 못한 거 같지만 이 부분은 이후에 OOP에 대해서 더 익숙해지고나서 수정을 해보겠다. // Calculator.kt import kotlin.math.round class Calculator { // 추가연산인지 확인하기 위한 변수 private lateinit var initialValue: Pair fun selectSymbol() { // 계산식 입력 println("원하는 연산을 입력해주세요.(종료를 원하시면 q를 입력해주세요)") // 받아야하는 형식 : (숫자)(연산기호)(숫자) val expression = readln() // 종료 이벤트 if (expression == "q") return /..

Kotlin/StoreInfo 2023.11.30

<강의> Kotlin 문법 종합반 5주차

1. 자료형 변환 - 일반 자료형 간의 변환은 to자료형() 메소드 사용 - 예시 fun main() { var num1 = 20 var num2 = 30.2 var num3 = num2.toInt() var num4 = num1.toDouble() var strNum5 = "10" var strNum6 = "10.21" var num5 = Integer.parseInt(strNum5) // strNum5.toInt() 도 동일한 기능 var num6 = strNum6.toDouble() println("num3: $num3") println("num4: $num4") println("num5: $num5") println("num6: $num6") } num3: 30 num4: 20.0 num5: 10..

Kotlin/StoreInfo 2023.11.30

<강의> Kotlin 문법 종합반 4주차

1. 접근제한자 - 접근 : 객체를 이용해서 변수나 메소드를 호출할 수 있는지 여부 - 프로젝트 : 최상단 개념이고 모듈, 패키지, 클래스를 포함 - 모듈 : 프로젝트 아래 개념이고 패키지, 클래스를 포함 - 패키지 : 모듈 아래 개념이고 클래스를 포함 - 종류 1) public : 어디서나 접근 가능 (명시하지 않을 시 기본적으로 public) 2) private : 동일한 클래스 내부에서만 접근 가능 3) internal : 같은 모듈 내부에서만 접근 가능 4) protected : 기본적으로는 private이지만 상속을 받은 경우에는 타 모듈에서 접근 가능 - 사용하는 이유 1) 데이터에 무분별하게 접근하는 것을 막기 위해 2) 클래스들 간에 접근 가능/불가능 상황을 구분하기 때문에 유지보수에 용이..

Kotlin/StoreInfo 2023.11.29
반응형