프로그래밍 언어/Kotlin 16

Context 없이 테스트 하기 : mockito 사용 예시

테스트가 어려웠던 이유 - 종속성 관리별로 어렵지 않은 경우 바로 아래로 가시면 됩니다.더보기더보기나의 경우 테스트를 선뜻 시작하기 어려웠던게 mocking이 가능하다는걸 몰랐기 때문이었다. 아래처럼 HiService라는 복잡한 클래스가 있다고 해보자.유저 이름을 넣으면 그 이름을 넣은 인사카드 gif 이미지를 반환하는 그런 서비스다.class HiService( // 특징 : DB에서 UserEntity를 불러온다. private val userRepository: UserRepository, // 특징 : UtilBean에 method가 백개쯤 있음 곧 분리될 예정 private val utilBean: UtilBean, // 특징 : API 호출 건수대로 돈받는 유료 ..

속성값으로 enum 객체 얻기 (value to enum)

아래와 같은 Enum class가 있을 때, 객체 이름이나 속성값으로 객체를 얻는 것이 가능하다. enum class Type(val num: Int) { A(1), B(2), C(3), } // "A" -> Type.A // 1 -> Type.A "A" → Type.A : valueOf 메서드 사용 Enum class에는 객체의 이름으로 enum 객체를 찾는 메서드가 이미 존재한다. 이걸 사용하자. EnumClass.valueOf(value: String): EnumClass // Type.valueOf("A") -> Type.A 반환 없는 객체를 검색하려고 시도하면 excpetion을 던진다는 점에 유의해야한다. 1 → Type.A : 직접 메서드 정의 그러나 다른 속성값에서 enum 객체를 찾고싶다..

Kotlin의 ArrayDequeue : Stack & Queue를 손쉽게 사용하기

public class ArrayDeque : AbstractMutableList Deque는 Double Ended Queue의 줄임말이다. 덱이라고 부르면 된다. 어느 방향으로든 삽입과 삭제가 구현되어있어서 Stack으로도, Queue로도 사용 가능하다. MutableList로 구현되어있어서 index를 통한 get/set operation도 가능하다. Stack으로 사용하는 법 /* Stack */ val stack = ArrayDeque() stack.add(e) // push, list 끝에 넣는다. stack.removeLast() // pop stack.last() // peek(조회) : Java에 Vector로 구현된 Stack이 있어서 Stack은 꼭 Deque을 사용하지 않아도 된다...

Kotlin의 시간계산 : LocalDate, LocalDateTime, Duration

LocalDate : 특정 지역의 연, 월, 일을 저장하기 위한 클래스. 계산도 가능하다. 일 단위 이하 연산이 불가능하다. LocalDateTime : 특정 지역의 연, 월, 일, 시, 분, 초, 밀리초를 저장하기 위한 클래스. LocalDate로 전환할 수 있다. 문자열을 바꿀때는 DateTimeFormatter를 사용할 수 있다. private val DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy:MM:dd:HH:mm:ss") val text = "2022:11:27:13:50:00" LocalDateTime.parse(text, DATE_FORMATTER) 만약 text가 ISO 공식 포맷을 따르는 경우 DateTimeFormatter의 프로퍼티를 그대..

List를 Map으로 만들기: associate

Kotlin의 associate 메서드를 사용한다. 일단 사용 예시부터 보자. val list = listOf(1, 2, 3) val exp1 = list.associateWith { "value" } // [1:value, 2:value, 3:value] val exp2 = list.associateBy { "key" } // [key: 1, key: 2. key: 3] -> [key: 3] 이 됨 val exp3 = list.associateBy { it } // [1: 1, 2: 2, 3: 3] val exp4 = list.associateBy({ it }, { "숫자$it" }) // [1: 숫자1, 2: 숫자2, 3: 숫자3] 1. associateWith ( valueSelector ) key..

java.io.File 사용법

[공식문서] 소개 요약 File is An abstract representation of file and directory pathnames. Instances of the File class are immutable Unix/Window 스타일, 절대/상대 경로 모두 지원함 getParent( )로 최상단 디렉토리를 얻을 수 있음. getPath( )로 pwd를 대체할 수 있음. Constructor 종류는 아래와 같다. File(File parent, String child) // Creates a new File instance from a parent abstract pathname and a child pathname string. File(String pathname) // Creates a..

Kotlin Collection 변환 함수 모음

ArrayList, List, Array 등의 내용을 원하는 컨텐츠로 변환할 수 있는 다양한 함수들이 있다. 1. all : collection의 모든 내용이 람다 조건에 맞는지 검사 후 Boolean 반환 val arr = arrayListOf(1,2,3) val result = arr.all{it == 1} println(result) // true 2. any : collection 내용중 하나라도 람다 조건에 맞는지 검사하고 Boolean 반환 val arr = arrayListOf(1,2,3) val result = arr.any{it == 1} println(result) 변환 메서드 정리한 블로그 글 : https://tourspace.tistory.com/111

IntelliJ에서 만들 수 있는 코틀린 프로젝트의 종류

공식문서 : https://www.jetbrains.com/help/idea/new-project-wizard.html#new-project-no-frameworks 코틀린 프로젝트 생성을 누르면 다양한 옵션이 있다. 한글판 기준으로 위에서부터 각 옵션의 특징을 정리해보았다. 새 프로젝트 : 가장 자주 사용하는 옵션. 언어, 빌드 시스템 선택이 자유롭다. 나는 kotlin & maven 조합을 가장 많이 사용했다. 샘플 코드 추가를 누르면 자동으로 main 클래스가 생성되서 별도의 configure 설정 없이 코드를 실행할 수 있게 된다. 추후 다른 프레임워크나 기술이 필요하다면 자유롭게 추가할 수 있다. 빈 프로젝트 : SDK 없이 Java, kotlin으로 작업할 수 있는 프로젝트를 만든다. 외부 라..

kotlin 문자열 +와 formatting의 차이

fun play(){ val a = "apple" val b = "bee" val plus = a+b //(new StringBuilder()).append(a).append(b).toString(); val format = "$a$b" //(new StringBuilder()).append(a).append(b).toString(); } 디컴파일 결과 같은 결과를 내기 때문에 성능상 차이는 없을 것으로 예상된다. 정말 개발자들 편하게 쓰라고 두가지를 만들어준 것 같다. 그래도 두 가지 스타일을 섞어서 쓰는 일은 없도록 하자. val notGood = a + "$a$b" val fine = "$a" + "$b" **문자열 길이가 길어져서 줄바꿈이 필요할 때는 +를 사용하면 좋다.