5. 코틀린의 유용한 기법 5.1 람다 함수와 고차 함수 람다 함수 익명 함수 정의 기법 필요시 참고하는 것이 나음, 내용이 너무 자잘하다 고차 함수 함수를 매개 변수나 반환값으로 사용 5.2 널 안정성 엘비스 연산자 ?: 변수가 null 일 때 대입해야 하는 값이나 실행해야 하는 구문 예외 발생 !! 필요에 따라 null인 경우 exception을 발생해야 할 때
안드로이드 앱 프로그래밍 with 코틀린 - 4. 코틀린 객체지향 프로그래밍
4. 코틀린 객체지향 프로그래밍 4.1 클래스와 생성자 클래스 선언만 하는 것도 가능 1 class User 클래스 생성에 new 키워드 사용하지 않음 주 생성자 클래스 선언부에 선언 constructor 생략 가능 init 키워드를 통해 로직 수행 가능 유일하게 매개변수에 val, var 키워드를 사용할 수 있음 ~= 그러면 자동적으로 멤버변수가됨 객체 생성의 메인 로직을 담당하는 편 보조 생성자 본문에 constructor로 선언 주 생성자가 있다면 무조건 호출해 주어야 함 1 2 3 4 class User(name: String) { constructor(name: String, count: Int): this(name) { } } 4.2 클래스를 재사용하는 상속 상속과 생성자 상위 클래스의 생성자를 어떻게든 호출해야한다. 1 2 3 4 5 open class Super(name: String) { } class Sub(name: String): Super(name) { } 오버라이딩 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 open class Super { open var someData = 10 open fun someFun() { println("I am super class function: $someData") } } class Sub: Super() { override var someData = 20 override fun someFun() { println("I am sub class function: $someData") } } fun main() { var obj = Sub() obj.someFun() // 출력 // I am sub class function: 20 } 접급 제한자 ...
안드로이드 앱 프로그래밍 with 코틀린 - 3. 코틀린 시작하기
3. 코틀린 시작하기 3.1 코틀린 언어 소개 표현력과 간결함 안전한 코드 nullable, not null 타입뒤에 ?로 표시 자바와의 상호운용성 구조화된 동시성 coroutine 코틀린 파일 구성 package: 컴파일시 만들어지는 클래스 파일의 경로 같은 package를 사용하면 import 없이 사용가능 자바와 달리 파일명도 클래스명과 일치할 필요 없음 3.2 변수와 함수 var말고 val 이라는 키워드도 존재함. 값 할당 후 수정 불가 타입지정 가능 최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초기화 해야함 초기화 지연 가능 lateinit: var 변수에만 가능. 숫자+Boolean 타입에는 불가 lazy 1 2 3 4 val data4: Int by lazy { println("in lazy...") 10 } 코틀린의 모든 변수는 객체 삼중 따옴표에는 trimIndent()가 자동으로 적용됨 Unit 타입: 반환문이 없는 함수에 사용 Nothing: null이나 예외를 반환하는 함수 함수 선언하기 함수의 매개변수는 val 키워드가 자동 적용 명명된 매개변수 지원 컬렉션 타입 기초 타입 Array도 별도로 존재 3.3 조건문과 반복문 if-else를 표현식(결과값을 반환하는 계산식)으로도 사용 가능 when 이라는 조건문도 존재. 마찬가지로 표현식으로 사용 가능 for, while이 있고, for 문에서 보통 범위 연산자 in 사용
안드로이드 앱 프로그래밍 with 코틀린 - 2. 안드로이드 앱의 기본 구조
2. 안드로이드 앱이 기본 구조 2.1 안드로이드 소개 안드로이드 런타임(Dalvik – (안드로이드 버전 5.0) –> ART(Android RunTime)) dex파일(앱파일) 해석하여 실행 2.2 안드로이드 앱 개발의 특징 생명주기를 안드로이드에서 관리하면 컴포넌트, 개발자가 관리하면 일반 클래스임 안드로이드 컴포넌트는 4종류 액티비티: 화면구성(화면 1개 담당) 서비스: 백그라운드 콘텐츠 프로바이더: 앱간 데이터 공유 브로드캐스트 리시버: 시스템 이벤트 수신 애플리케이션 라이브러리를 사용할 수 있음 리소스 xml 파일로 등록하여 사용 2.3 앱 구성 파일 분석 하나의 모듈 ~= 하나의 앱 build.gradle.kts (빌드 설정 파일) gradle: 안드로이드 빌드 도구 AndroidManifest.xml (메인 환경 파일) 속성값이 @로 시작하면 리소스 시스템은 매니페스트에 있는 대로 앱을 실행 ~= 컴포넌트를 매니페스트에 등록해야 한다. (Activity, Service, Receiver, Provider, name 속성은 필수) 태그는 액션별 실행 정의 res 폴더 (리소스) drawable: 이미지 layout: UI 구성에 필요한 xml mipmap: 앱 아이콘 values: 값 리소스 R.java 파일에 상수 변수로 자동등록 지정된 방식으로만 사용됨 activity_main.xml (기본 레이아웃 파일) MainActivity.kt (메인 액티비티) MainActivity 클래스가 실행되면 onCreate() 호출됨
디자인 패턴의 아름다움 - 1. 개요
1. 개요 1.1 코드 설계를 배우는 이유 효율적인 코드 작성 = 데이터 구조 + 알고리즘 유지 보수가 용이한 고품질 코드 = 코드 설계에 대한 지식 1.1.1 고품질의 코드 작성 1.1.2 복잡한 코드 개발 다루기 소프트웨어 개발 시 만나는 어려움의 유형 2가지 높은 수준의 기술을 필요로 하는 경우: 자율 주행, 비디오 인식, AI 높은 수준의 기술을 필요로 하지 않는 대규모 프로젝트: 이 책에서 다룰 내용 1.1.3 프로그래머의 기본 능력 1.1.4 경력 개발에 필요한 기술 1.2 코드 품질 평가 방법 1.2.1 유지 보수성 기존의 코드 설계를 손상하거나 새로운 버그를 발생시키지 않고도 빠르게 코드를 수정하거나 추가할 수 있는 상태 코드가 간결하고 가독성이 높으며 확장성이 높다면 코드의 유지 보수도 쉬움 코드가 명확하게 계층화되어 있으며, 높은 모듈성, 높은 응집도와 낮은 결합도를 가짐 1.2.2 가독성 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 작성한다. 제가 중요하게 생각하는 것 중 하나 1.2.3 확장성 약간 수정하는 것만으로도 혹은 전혀 수정하지 않고도 확장을 통해 새로운 기능을 추가하는 것 요구 사항의 미래 변화에 대처할 수 있는 코드의 능력 1.2.4 유연성 추상적인 평가 기준이기 때문에 정의하기 쉽지 않음 확장을 위한 인터페이스가 준비되어 있음 기본적으로 재사용 가능한 많은 모듈과 클래스 등이 기존 코드에 추상화된 형태로 이미 제공 클래스가 다양한 사용 시나리오에 대응하고, 다양한 요구를 충족 가능 1.2.5 간결성 널리 알려진 KISS(Keep It Simple, Stupid) 원칙 많은 프로그래머는 단순한 코드에 복잡한 디자인 패턴을 도입하는 것을 좋아한다. 그러나 고수준의 프로그래머는 종종 간단한 방법으로 복잡한 문제를 해결한다. 저의 코딩 스타일 중 하나 1.2.6 재사용성 반복적인 코드 작성을 최소화하고 기존 코드를 재사용하는 것 단일 책임 원칙(single Responsibility principle) DRY(Don’t repeat yourself) 원칙 1.2.7 테스트 용이성 이 책에서 처음 보는 기준인데, 중요할 것 같네요. 1.3 고품질 코드를 작성하는 방법 1.3.1 객체지향 세 가지의 프로그래밍 패러다임(절차적, 함수형, 객체지향) 중에서 객체지향 프로그래밍이 가장 대중적임 이 책에서는 객체지향에 대해 마스터하는 것을 목표로 함 1.3.2 설계 원칙 각각의 설계 원칙이 어떤 문제와 응용 시나리오를 해결하는데 사용되는 것인지 파악해야 한다 모두 마스터해야만 설계 원칙을 프로젝트에 유연하고 적절하게 적용할 수 있다 설계 원칙은 디자인 패턴보다 더 보편적이고 중요한 것이다. 1.3.3 디자인 패턴 자주 접하게 되는 일부 설계 문제에 대해 요약된 솔루션 또는 설계 사상 1.3.4 코딩 규칙 주로 가독성 문제 해결 1.3.5 리팩터링 기법 1.4 과도한 설계를 피하는 방법 1.4.1 코드 설계의 원래 의도는 코드 품질을 향상시키는 것이다 1.4.2 코드 설계의 원칙은 앞에 문제가 있고, 뒤에 방안이 있다는 것이다 1.4.3 코드 설계의 응용 시나리오는 복잡한 코드에 적용되어야 한다 디자인 패턴을 적용하는 목적은 디커플링, 즉 더 나은 코드 구조를 사용하여 단일 책임을 위해 큰 조각을 작은 클래스로 분할하여 코드가 높은 응집도와 낮은 결합도의 특성을 충족하도록 하는 것이다. 1.4.4 지속적인 리팩토링은 과도한 설계를 효과적으로 방지할 수 있다 실현 가능성이 낮은 미래의 요구 사항을 위해 처음부터 디자인 패턴을 적용하기보다, 진짜 문제가 발생했을 때 이를 해결하기 위한 디자인 패턴을 사용하는 것을 고려하는 것이다. 1.4.5 특정 시나리오 외의 코드 설계에 대해 이야기하지 않는다
양귀자 - 모순
ChatGPT가 나온 이후로 포스팅할 맛이 안 나요. 왜냐하면 물어보면 다 알려주거든요~ 저 또한 검색하지 않고 바로 ChatGPT한테 물어보는 경우가 늘어서 이거 뭐~ 포스팅해 봐야 의미가 있나 싶더라고요. 그래도 다시 적어 볼까 합니다. 그냥 제가 하던 일중에 하나니까요. 인생이란 어쩌면 어떤 일(Job만의 의미가 아닌)을 할지 찾아나가는 과정일지도 모릅니다. ...
워드 비교 기능 오류 해결 방법
워드 비교 기능을 이용하여 아주~ 나이스하게 한 문서의 작업을 끝내고 다음 문서를 비교하려고 하니 오류가 뜨더군요. 정말 필요로 하던 꿀 기능인데, 이렇게나 쉽게 오류가 발생해서 못쓰나 낙담하다가 혹시나 해결책이 있을까봐 싶어서 찾아봤습니다. ...
아니 이런 기능이 있었다고?! 워드 비교 기능에 대하여
지금 일하는 곳에서 분기에 한 번은 규격 문서의 변경사항을 파악하여 정리하는 일을 하고 있습니다. 규격문서는 깃허브에 PR(Pull Request)를 올리는 것 처럼, CR(Change Request) 문서를 통하여 변경사항을 반영하는데요. ...
해밀턴 카키 필드 머피 구매후기
2024.11.19 추가 팔아버렸습니다.. 시계는 마음에 드는데, 핸드폰에서 오는 알림을 못 받으니까 안차게 되네요 ㅜ 마음가짐만 챙기겠습니다. 좋은 시계였다.. 나랑 안 맞을 뿐! adios 스포츠용 시계밖에 없어서 평범한 시계 하나 사야지하는 생각을 갖고 있었는데 이번에 구매를 했습니다. ...
2024 안동마라톤 하프코스 뒤늦은 후기
10월 6일(일) 안동마라톤 하프코스를 뛰고 왔습니다. 독서모임을 같이 하고 있는 형이랑 같이 참가했고 형의 어머니도 같이 출전, 형의 아버지께서 운전기사가 되어 3명의 컨디션을 위해 힘써주셨습니다. ...