본문 바로가기

전체 글

(159)
Android Clean Architecture 관심사 분리Clean Architecture에서 가장 중요한 원칙여기서 말하는 관심사는 프로그램 코드에 영향을 미치는 정보의 집합을 말한다.주요 원칙의존성 역전 원칙양쪽 모두 추상화에 의존경계의 분리시스템을 여러 영역으로 나누고, 각 영역의 사이의 인터페이스를 정의인터페이스 분리 원칙인터페이스는 클라이언트의 요구에 맞는 형태로 분리장점유지보수 용이계층이 분리 되어있어 용이테스트 용이의존성 주입하여 테스트 하기 용이모듈간의 분리로 재사용성 UI LayerUI 요소 자체Compose UIViewModelDomain Layerusecase Data Layer
Kotlin In Action - 7. 연산자 오버로딩과 기타 관례 관례: 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법7.1 산술 연산자 오버로딩이항 산술 연산 오버로딩연산 기호를 정의확장 함수로도 정의 가능연산자가 자동으로 교환 법칙을 지원하지는 않는다. ex) Point.times면 무조건 이 순서에 맞춰서복합 대입 연산자 오버로딩+=, -= 같은 복합 대입 연산자도 오버로딩 가능plusAssing, minusAssign 등...변경 가능한 컬렉션에서 객체 상태를 변환, 읽기 전용에서는 변경을 적용한 복사본 반환단항 연산자 오버로딩7.2 비교 연산자 오버로딩동등성 연산자: equals== 의 호출을 오버로딩==, != 는 내부에서 인자가 널인지 검사===를 사용해 수신 객체가 같은지 살펴본다 / 원시 타입의 경우 값이 같은지 / 자기 자신과 비교를 최..
Kotlin In Action - 6. 코틀린 타입 시스템 널이 될 수 있는 타입읽기 전용 컬렉션6.1 널 가능성NPE를 피할 수 있게 만든 코틀린 타입의 특성컴파일러가 미리 감시널이 될 수 있는 타입변수.메소드() 호출 불가널이 될 수 있는 값에 없는 타입의 변수 대입 불가널이 될 수 있는 타입의 값에 없는 타입의 파라미터 전달 불가? :  자바에서 @Nullable 어노테이션 / @NotNull타입의 의미어떤 값들이 가능한지와 수행할 수 있는 연산의 종류자바에서 NPE 다루는 법어노테이션 활용null 값을 코드에 쓰지 않는 것optional: null 가능성이 있는 객체를 감싸는 것isPresent: 값 여부 확인orElse: default 값안전한 호출 연산자: ?.?. null check해서 null이면 null 반환자바에서 if문 체크로 해결엘비스 연산..
Kotlin In Action - 5. 람다로 프로그래밍 람다는 다른 함수에 넘길 수 있는 작은 코드 조각5.1 람다 식과 멤버 참조람다 소개: 코드 블록을 함수 인자로 넘기기자바에서는 인터페이스를 구현하는 무명 내부 클래스를 이용하였지만 코틀린은 람다로 구현람다와 컬렉션자바 컬렉션에 대해 수행하던 대부분의 작업은 람다나 멤버 참조를 인자로 취하는 라이브러리 함수를 통해 개선할 수 있다.람다식의 문법파라미터 -> 문법람다 본문을 둘러싸 실행할 필요가 있다면 run을 사용람다가 유일한 인자면 괄호 뒤에 둘 수 있다. 아니면 괄호 제거도 가능파라미터 타입도 추론 가능본문의 맨 마지막이 람다의 결과현재 영역에 있는 변수에 접근람다를 함수 안에서 정의하면 함수의 파라미터뿐 아니라 람다 정의의 앞에 선언된 로컬 변수까지 람다에서 모두 사용가능forEach - while..
Kotlin In Action - 4. 클래스, 객체, 인터페이스 Kotlin의 기본 선언은 final, public중첩 클래스는 내부 클래스가 아니다4.1 클래스 계층 정의코틀린 인터페이스추상메서드 뿐 아니라 디폴트 구현이 있는 메소드도 정의 가능public static final class로 만든 후 내부 메서드로 구현override 변경자 필수 사용같은 이름의 메소스 구현시 오버라이딩 메소드를 직접 제공하지 않으면 에러 발생super 으로 구현자바에서는 코틀린의 디폴트 메서드 구현에 의존할 수 없다.일반 인터페이스와 디폴트 메서드 구현이 정적 메서드로 들어있는 클래스를 조합해 구현멤버가 항상 열려있다. final, open, abstract 사용 안함open, final, abstarct 변경자취약한 기반 클래스기반이 되는 클래스 변경시 하위 클래스의 동작이 예기..
해시 테이블 키에 값을 매핑할 수 있는 구조인, 연관 배열 추상 자료형을 구현하는 자료구조대부분의 연산의 시간복잡도가 O(1)해시해시 함수: 임의 크기 데이터를 고정 크기 값으로 매핑하는데 사용할 수 있는 함수해싱: 해시 테이블에 인덱싱하기 위해 해시함수를 사용하는 것로드 팩터충돌을 방지하기 위한 최적화 방법해시 테이블에 저장된 데이터 개수 n을 버킷의 개수로 나눈 것충돌아무리 좋은 해시 함수라도 충돌은 발생한다.개별 체이닝충돌 발생 시 연결리스트로 연결하는 방식오픈 어드레싱충돌 발생시 탐사를 통해 빈 공간을 찾아나서는 방식무한정 저장할 수 있는 체이닝과 달리 전체 슬롯의 개수 이상은 저장 할 수 없다.자바는 개별 체이닝
Kotlin in Action - 함수 정의와 호출 1. 코틀린에서 컬렉션 만들기hashMapOf(1 to "One") 처럼 매핑, 여기서 to 는 일반 함수(Pair의 infix 함수) @ infix: 연산자를 중간에 위치하는 기능코틀린 자신만의 컬렉션 기능을 제공하지 않고 기존 자바 컬렉션을 활용한다.이유: 기존 자바 컬렉션을 활용하면 자바 코드와 상호작용하기 쉽다.2. 함수를 호출하기 쉽게 만들기이름 붙인 인자공백으로 값을 넘기는 경우 무슨 의미로 넘기는 지 알 수 없다. 특히 booelan 값은 더 그러므로 그 때는 Enum을 추천한다.코틀린에서는 함수에 전달하는 인자 중 일부 또는 전부의 이름을 명시할 수 있다. 대신 하나라도 명시하면 그 뒤에 오는 모든 인자는 이름을 명시해야 한다.디폴트 파라미터 값자바에서 일부 클래스에 오버로딩한 메소드가 많..
Kotlin in Action - 2. 코틀린 기초 1. 함수와 변수Hello Worldfun 키워드, 파라미터 이름, 파라미터 타입 순으로 적는다.자바와 달리 클래스 안에 함수가 있는 것이 아닌, 함수를 최상위 수준에 정의 할 수 있다.배열도 일반적인 클래스와 마찬가지이다.감싼 Wrapper 클래스를 제공해 여러가지 자바 표준 라이브러리를 간결하게 사용할 수 있다.세미 콜론을 붙이지 않아도 된다.함수함수 이름, 파라미터 목록 : 반환 타입 { 함수 본문 }문과 식식(expression) : 값을 만들어 내며 다른 식의 하위 요소로 계산 참여 가능문(statement) : 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소자바와 달리 대입식과 비교식을 잘못 바꿔 써서 버그가 생기는 경우가 없다.자바: = 대입  / == 비교 -> 대입, 비교 둘 다 bo..