분류 전체보기 (172) 썸네일형 리스트형 [Android] Clean Architecture 실전 압축 정리 - 개념 처음 학습하면서 작성한 글입니다. 필요시 추후 내용을 수정할 예정입니다. 틀린 부분이 있으면 언제든 지적해주면 감사하겠습니다 :) 클린 아키텍처를 공부하다 보면 모든 블로그에서 다음과 같은 이미지를 볼 수 있었다. 이게 뭔데 다들 이것만 올리는건데? 이게 뭔데 다들 이것만 올리는건데? 필자는 해당 이미지를 가장 처음 보았을 때 이런 생각이 먼저 들었다. 이는 Clean Architecture 에 대한 개념이 없이 해당 그림만 보면 이해가 안되는 것이 당연한 것이다. (어느정도 공부하고 봐도 헷갈리는건 마찬가지다) 그래서 교과서적인 개념 정리보다는, 필자가 공부하고 예제를 만들어 보면서 이해한 대로 정리해보려고 한다. 교과서적인 개념 정리가 필요하면, 다른 정리가 깔끔하게 된 블로그들이 많으니 참고하길 바.. [Kotlin] 10장. 코루틴과 동시성 프로그래밍 코루틴? 하나의 개별적인 작업을 루틴(routine)이라고 부르는데 코루틴이란 여러 개의 루틴들이 협력(co)한다는 의미로 만들어진 합성어. 프로세스와 스레드 하나의 프로그램이 실행되면 프로세스가 시작되는데 프로세스는 실행되는 메모리, 스택, 열린 파일 등을 모두 포함하기 때문에 프로세스 간 문맥 교환을 할때 많은 비용이 든다. 반면, 스레드는 자신의 스택만 독립적으로 가지고 나머지는 스레드끼리 공유하므로 문맥 교환 비용이 낮아 프로그래밍에서 많이 사용된다. 스레드 스레드 루틴을 만드려면 Thread 클래스를 상속받거나 Runnable 인터페이스를 구현하여 사용한다. 이런식으로 사용이 가능하며, 익명 클래스를 사용하면 다음과 같이 사용이 가능하다. 스레드 풀 사용하기 몇 개의 스레드를 먼저 만들어 놓고 .. [Kotlin] 9장. 표준 함수와 파일 입출력 람다식 람다식은 항상 중괄호로 묶여 있으며 중괄호 안에 매개변수는 화살표 왼쪽에 배치, 오른쪽에는 그에 따른 식을 구현한다. val 변수 이름: 자료형 선언 = { 매개변수[,...] -> 람다식 본문 } sum은 익명 함수로 만들어지며, 람다식의 x + y 값이 반환 된다. 여기서 x, y의 값은 고정된 것이 아닌 사용자가 마음대로 선언이 가능하다. 하지만, 매개변수가 1개인 경우 매개변수를 사용하여 표현할 수 있지만 매개변수를 생략하고 it으로 표기할 수 있다. 이 때, it 은 고정된 변수 이름이므로 변경해선 안된다. 클로저 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념을 말한다. 이 때, 람다식 안에 있는 외부 변수는 값을 유지하기 위해 람다식이 포획한 변수라고 .. [Kotlin] 9장. 컬렉션 컬렉션 컬렉션의 종류로는 List, Set, Map 등이 있으며 자바와는 다르게 불변형(immutable)과 가변형(mutable)으로 나뉜다. List : 불변형 listOf , 가변형 mutableListOf, arrayListOf Set : 불변형 setOf , 가변형 mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf Map : 불변형 mapOf , 가변형 mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf 변수 선언시에 불변형인 val의 사용을 권장하듯이 컬렉션도 되도록이면 읽기 전용인 불변형으로 사용하는 것을 권장. List 불변형 List 값을 변경할 수 없는 불변형 List를 만드려면 헬퍼 함수인 listOf()를 .. [Kotlin] 8장. 제네릭과 배열 2 - 배열 배열 기본적인 배열 표현 배열을 생성하기 위해서는 arrayOf() 나 Array() 생성자를 사용하면 되고, 빈 상태의 배열을 지정하는 경우 arrayOfNulls()를 사용하면 된다. 다차원 배열의 경우 arrayOf안에 다시 arrayOf로 배열을 선언하면 다차원 배열을 만들 수 있다. val arr = arrayOf(arrayOf(1,2,3), arrayOf(4,5,6), arrayOf(7,8,9)) for (e1 in arr) { for (e2 in e1) { println(e2) } println() } 과 같이 2차원 배열을 선언하고, for문을 사용해 각 값을 출력할 수 있다. 특정 자료형으로 제한하지 않는다면 여러가지 자료형을 혼합할 수 있다. val mixArr = arrayOf(1, .. [Kotlin] 8장. 제네릭과 배열 1 - 제네릭 제네릭 제네릭은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다. 객체의 자료형을 컴파일할 때 체크하기 때문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다. 제네릭의 일반적인 사용법 앵글 브래킷() 사이에 형식 매개변수를 넣어 선언하며, 형식 매개변수는 하나 이상 지정할 수 없다. box3,4 처럼 생성자에서 유추될 수 있는 자료형이 있다면 선언된 자료형을 생략하고 호출이 가능하다. null 제어 제네릭은 기본적으로 null이 가능한 형태로 선언된다. 자료형에 ?를 붙여서 선언하게 되면 해당 값은 null이 들어갈 수 있다는 표시이다. 따라서 obj 객체에는 null 값이 들어가면 에러로 처리되지만, obj2 객체는 null 값이 들어가도 정상적으로 동작한다. nul.. [Kotlin] 7장. 다양한 클래스와 인터페이스 2 - 데이터 클래스와 연산자 오버로딩 DTO DTO는 Data Transfer Object로 데이터 전달을 위한 객체이다. JAVA에서는 POJO(Plain Old Java Object)라고 부르기도 하였다. DTO는 다음과 같은 특성을 가지고 있다. 구현 로직을 가지고 있지 않다. 순수한 데이터 객체를 표현하기 때문에 보통 속성과 게터/세터를 가진다. toString(), equals() 등과 같은 데이터를 표현하거나 비교하는 메서드를 가져야 한다. 하지만, Kotlin에서 DTO를 위해 데이터 클래스를 정의할 때, 게터/세터, toString(), equals()와 같은 메서드는 직접 만들 필요 없이 내부에서 자동적으로 생성된다. 자동으로 생성되는는 메서드는 다음과 같다. 프로퍼티를 위한 게터/세터 비교를 위한 equals() 키 사용을.. [Kotlin] 7장. 다양한 클래스와 인터페이스 1 - 추상 클래스와 인터페이스 추상클래스 abstract 키워드를 사용하며, 일반적인 객체를 생성하는 방법으로 인스턴스화 시킬 수 없다. 추상 클래스를 설계할 때 멤버인 프로퍼티나 메서드도 abstract로 선언될 수 있으며, abstract로 선언되지 않은 메서드나 프로퍼티는 특정 초기화나 구현이 필요하다. abstract 키워드로 선언되면 미완성이라는 것이기 때문에 해당 클래스를 사용하는 하위 클래스에서 반드시 재정의 및 초기화를 진행해야 한다. 추상 클래스로부터 하위 클래스를 생성하지 않고 단일 인스턴스로 객체를 생성하려면 object 키워드를 사용해서 지정할 수 있다. 인터페이스 인터페이스에는 abstract로 정의된 추상 메서드나 일반 메서드가 포함된다. 추상 클래스는 상속을 통해 하위 클래스로 확장해 나갈 수 있다. 하지만.. 이전 1 ··· 14 15 16 17 18 19 20 ··· 22 다음 목록 더보기