본문 바로가기
728x90

전체 글155

[kotlin] 확장함수 확장함수 기존 코드를 재작성하지 않고, 메서드를 추가할 수 있는 기능. 정적 메서드 호출에 대한 문법적 편의를 제공하는 기능. 사용 방법 아래와 같이 다양한 방법으로 사용할 수 있다. fun main() { val str: String = "otter66" println(str.lastChar()) } 1. fun String.lastChar(): Char = this.get(this.lastIndex) 2. fun String.lastChar(): Char = this[this.lastIndex] 3. fun String.lastChar(): Char = get(lastIndex) 1, 2번의 경우 수신객체에 this를 사용해 접근한 방법이다. 3번과 같이 수신객체를 this 없이 접근할 수도 있다. .. 2023. 5. 11.
MVC pattern (Model View Controller) Model View Controller 애플리케이션의 구성 요소를 세 가지 역할로 구분해 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있도록 한 패턴 생기게 된 배경 길어지는 코드의 가독성, 유지보수가 불편해짐 각 코드가 반복되며 코드의 기능별로 패턴을 나누게 됨 장점 단순, 직관적 재사용성과 확장성 용이 각 계층의 변화가 다른 계층에 변화를 일으키지 않아 변동에 유리함. 단점 애플리케이션의 규모가 커지고 복잡해질수록 모델과 뷰의 관계가 복잡 Controller와 View의 강결합 대상 플랫폼에 따라 적용이 불가능할 수 있음 (안드로이드) 안드로이드의 경우 Activity에서 view를 관리하고, 도메인 로직을 사용해야 하므로 controller와 view가 함께 있을 수밖에 없다. MVC.. 2023. 4. 30.
[kotlin] 인터페이스와 추상클래스 인터페이스 interface: 경계면, 대화라는 뜻을 가진 단어. 일상생활 속에서 사람과 사람의 대화라는 인터페이스 → 역할과 역할의 메시지라는 인터페이스 역할에서 인터페이스를 통해 다른 역할에게 메시지를 보내어 다른 역할을 사용한다. 즉, 외부와의 상호작용을 정의한 것 요구사항 및 구현 변경시 기능을 외부의 변화를 최소화하기 위해 사용 예시. 변경이 잦을 것 같은 객체의 위에 인터페이스를 두어 인터페이스를 통해 소통하도록 한다. 특징 변수: 상태 불가능, 속성 가능 (⇒ 변수를 선언할 수는 있지만, 값을 할당할 수는 없음) (같은 이유로 생성자는 값을 가지는 상태이기 때문에 생성자를 가질 수 없음) 사용 가능 접근제어자: private, public 다중 상속 가능 인스턴스화 불가능 아래와 같이 Jav.. 2023. 4. 29.
Kotlin에서의 프로퍼티, Java에서의 필드와 프로퍼티 서론 자바에서는 클래스의 속성이나 상태를 나타낼 때 주로 필드와 프로퍼티라는 두 가지 용어를 사용합니다. 코틀린에서는 클래스의 속성과 상태를 나타낼 때 프로퍼티라는 용어만 사용합니다. 그렇다면 Java에서의 필드와 프로퍼티, Kotlin에서의 프로퍼티는 어떤 차이가 있는 걸까요? 우선 자바의 필드와 프로퍼티를 살펴 보겠습니다. Java의 field와 property field: 자신이 속한 클래스의 내부 변수. (속성 및 상태) property: 클래스의 내부 변수(필드)에 대해 접근자(getter/setter)를 사용해 접근하는 것. 필드와 접근자를 통틀어 가리키는 용어. 필드는 외부에서 직접 접근이 가능합니다. 그러나 클래스 밖에서 직접 접근은 권장되지 않습니다. 즉, 접근자를 사용하는 프로퍼티 사용.. 2023. 4. 10.
Kotlin 에서의 원시값 포장과 그에 적합한 클래스 선택하기 서론 원시값들을 모두 포장하다보니 클래스 외부에서 비교를 할 때 아래와 같이 코드가 길어지고 복잡해지는 경우가 많았다. 예제) 로또의 번호들이 중복되었는지 검사하는 코드 require(numbers.size == numbers.distinctBy { it.number }.size) { LOTTERY_NUMBERS_DUPLICATE_ERROR } 따라서, 외부에서 사용시 복잡해지지 않도록 equals를 override하였다. 두 객체를 비교할 때 객체의 주소가 아닌 객체의 내부 변수를 이용해 비교를 하도록 하였다. 하지만 이렇게 원시값을 포장할 때는 class 보다는 data class가 더 적절할 수 있다. 때에 따라서는 value class가 더 적절할 수도 있다. class, data class, v.. 2023. 4. 8.
우아한테크코스 5기 모바일 레벨1 총정리 서론 (이라 쓰고 변명이라 읽는다. 뒤늦게 몰아 쓰는 것에 대한 변명...) 하나의 미션에서 처음으로 기법, 개념 등의 존재를 알게 된다. 이것들을 해당 미션이나 다음 미션에 적용시켜보며 궁금한 것을 알아본다. 알아본 것을 적용시킨다. 이런 과정을 반복하며 알게된 것들이다. 그래서 명확하게 각 미션을 통해 얻게된 지식은 아니다. 그래도 나름 정리해 보았다. 레벨1 레벨1 과정을 진행하며 주된 학습 목표라고 느꼈던 것은 코틀린과 객체지향 프로그래밍이다. 학습 (레벨1의 교육 목표라고 생각되는 것) 객체지향 프로그래밍 (OOP, Object-Oriented Programming) 코틀린 객체지향 생활 체조 원칙 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. else 예약어를 쓰지 않는다. 모든.. 2023. 4. 8.
[git] origin에 merge된 브랜치에서 추가로 진행된 commit 이동하기 문제 상황 local step1이 origin otter66에 머지가 된 후 local step1의 커밋 내용을 그대로 가지고 새로운 브랜치 local step2를 만들어 local step2에 불필요한 local step1 커밋 기록들이 남아있는 상황 문제 발생 이유 local step1이 origin otter66에 머지가 된 후 머지된 브랜치로 체크아웃을 하고, 새롭게 step2를 만들어야 했으나 step1에서 곧바로 step2를 만들어 step1의 커밋(해시값까지 같은 커밋)들이 step2에 따라왔다. ⇒ 제발 머지된 브랜치에서 곧바로 다른 브랜치를 만드는 행동은 하지 말자...! 멈춰...! 제발...! 해결 과정 1. upstream에서 머지된 origin otter66을 local otter.. 2023. 2. 27.
[kotlin][JUnit5] TDD (Test Driven Development, 테스트 주도 개발) 얕은 지식으로 정리해보는 TDD!! 한두달 간의 프리코스 기간에는 재미없고 뭔지 모르기만 했던 테스트 주도 개발이 약 2주일만에 재밌고, 편해졌다! TDD란? 테스트 코드를 먼저 작성 후 작성된 테스트코드에 맞춰 제품 코드를 작성하는 프로그래밍 방법 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나 TDD는 단순한 설계를 장려하고 자신감을 불어 넣어 준다. TDD가 좋은 이유 내 코드 및 개선한/개선할 코드에 자신감을 준다. 코드를 이래저래 개선해도 '테스트 코드가 지켜줄거야!' 라는 자신감이 붙는다. 따라서 개선에 대해 두려움이 없어지고, '일단 바꿔보자'라는 생각을 할 수 있게 된다. 즉, 망설임이 없어진다. (= 개발에 속도가 붙는다.) 기능 명세 및 테스트 명세를 대신할 수 있게 된다.. 2023. 2. 21.
트랜잭션과 무결성 트랜잭션 데이터베이스에서 이뤄지는 여러 작업들을 논리적으로 구분한 단위 여러 쿼리를 하나로 묶는 단위 특징 (ACID) 무결성 보장을 위한 트랜잭션이 가져야 할 특성 Atomicity(원자성) 트랜잭션 관련 일의 수행 여부를 보장한다. 트랜잭션 수행을 정상적으로 완료시 DB에 모두 반영되도록 커밋한다. 트랜잭션에 하나라도 오류가 발생해 문제가 생길 경우 롤백을 통해 세이브포인트까지 전부 취소한다. Consistency(일관성) 시스템의 고정 요소는 트랜잭션 수행 전/후가 같아야 한다. Isolation(독립성, 격리성, 순차성) 복수의 트랜잭션 병행 실행시 각각 격리되어 하나만 실행되고 다른건 대기한다(참조 불가 상태). 순차적으로 실행시 성능이 좋지 않으므로 격라 수준을 나누어 격리성을 보장한다. D.. 2023. 2. 17.
728x90