프로그래밍 언어 17

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

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

[JS] Map 사용하기 : prototype으로부터 안전하다

Map 자료구조란key와 value를 묶어서 저장할 때 유용한 자료구조이다.단순히 두 값을 묶을 뿐만 아니라, key를 통해 빠르게 저장된 값을 조회할 수 있다.따라서 map에서의 key는 항상 유일해야하며, 기준이 되는 연산자는 === 이다. Object와 비슷하게 보일 수도 있다. 실제로 여기 있는 기능 모두 object를 사용해서 구현할 수 있다.다만 Map 객체와 달리 Object는 프로토타입에 정의된 기본키를 가져서, 예상하지 못한 항목이 추가될 수 있다는 점이 다르다.object literal 표현식은 정말 인스턴스를 표현하거나 enum class를 구현할 때 사용하고,key - value 쌍을 저장하고 가공하기 위한 용도로는 명시적으로 Map 객체를 사용하는게 좋다고 생각한다. Map 초기화..

속성값으로 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으로 작업할 수 있는 프로젝트를 만든다. 외부 라..