본문 바로가기

전체 글239

[Kotlin IN ACTION] - Kotlin sealed 클래스 봉인된 클래스 : 클래스 계층 정의시 계층 확장 제한 예제 코드를 보고 설명을 하겠다. interface Expr class Num (val value : Int) : Expr class Sum (val left : Expr, val right : Expr) : Expr fun eval (e : Expr) : Int = when(e) { is Num -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") } 위 코드를 확인해보면, 우리가 eval 함수 내에서 작성한 when 식에서 else 라는 분기를 반드시 넣어주어야 한다는 사실을 알 것이다. 코틀린 컴파일러는.. 2022. 7. 25.
[Kotlin IN ACTION] - Kotlin 접근 제어자(가시성 변경자) / 내부 클래스 / 중첩 클래스 가시성 변경자 (접근 제어자) 코드 기반에 있는 선언에 대한 클래스 외부 접근을 제어한다. 어떤 클래스의 구현에 대한 접근을 제한함으로써 그 클래스에 의존하는 외부 코드를 깨지 않고도 클래스 내부 구현이 변경 가능하다. Kotlin 접근 제어자 종류 public(기본 가시성) internal protected private 아무 변경자가 없는 경우는 public 이다. 변경자 클래스 멤버 최상위 선언 public 모든 곳에서 볼 수 있다. 모든 곳에서 볼 수 있다. internal 같은 모듈 안에서만 볼 수 있다. 같은 모듈 안에서만 볼 수 있다. protected 하위 클래스 안에서만 볼 수 있다. (최상위 선언에 적용할 수 없음) private 같은 클래스 안에서만 볼 수 있다. 같은 파일 안에서만 .. 2022. 7. 25.
[안드로이드] - UI Layer Architecture UI 레이어 아키텍처 UI 라는 용어 - 사용하는 API와 관계없이 데이터를 표시하는 활동 및 프래그먼트와 같은 UI 요소를 가리킨다. 데이터 레이어의 역할 앱 데이터를 사용하고, UI 에서 쉽게 렌더링할 수 있는 데이터로 변환합니다. UI 렌더링 가능 데이터를 사용하고 사용자에게 표시할 UI 요소로 변환합니다. 이렇게 조합된 UI 요소의 사용자 입력 이벤트를 사용하고 입력 이벤트의 결과를 필요에 따라 UI 데이터를 반영합니다. 1~3단계를 필요한 만큼 반복한다. 위의 데이터 레이어의 역할을 알면, UI 와 데이터 레이어의 상호작용이 어떤식으로 이루어지는 지를 알 수 있다. UI 상태 정의 사용자가 보는 항목이 UI 라면 UI 상태는 앱에서 사용자가 봐야 한다고 지정하는 항목을 말한다. 동전의 양면과 마.. 2022. 7. 23.
[프로그래머스 *Java] - 큰 수 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 조건 제한 시간 : 1시간 이내 문제설명은 짧지만, 로직을 짜기 위한 생각을 오래 해야했던 문제였다. 로직 구현은 코드를 보고 실명하는게 빠를 거 같다. 코드를 확인해보자. 전체 코드 class Solution { public String solution(String number, int k) { StringBuilder answer = new StringBuilder(""); int start .. 2022. 7. 23.
[Kotlin IN ACTION] - Kotlin open / final / abstract 상속 제어(접근) 변경자 open 변경자 자바에서는 final 을 사용한 클래스는 상속이 안된다는 걸 알고 있을 것이다. 반대로 말을하자면, final 을 안 쓴 클래스는 모든 클래스가 상속 받을 수가 있다. 하지만 이렇게 기본적으로 상속이 가능하면 편리한 경우도 많지만, 문제가 생기는 경우가 많다. 취약 기반 클래스(fragile base class) 라는 문제가 있다. 그게 무엇이냐면, 하위클래스가 기반 클래스에 대해 가졌던 가정이 기반 클래스를 변경함으로써 깨져버린 경우에 생긴다. 어떤 클래스가 자신을 상속하는 방법에 대해 정확한 규칙(어떤 메서드를 어떻게 오버라이드해야 하는지 등)을 제공하지 않는다면 그 클래스의 클라이언트는 기반 클래스를 작성한 사람의 의도와 다른 방식으로 메서드를 오버라이드할 위험이 있다. 모든 하위 .. 2022. 7. 22.
[Kotlin IN ACTION] - Kotlin Interface(인터페이스) 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 코틀린 인터페이스는 안에는 추상 메서드뿐 아니라 구현이 있는 메서드도 정의할 수 있다. 다만, 인터페이스에는 아무런 상태(field)도 들어갈 수 없다. // click 이라는 추상 메서드가 있는 인터페이스 정의 interface Clickable { fun click() } 이 인터페이스를 구현하는 모든 비추상 클래스(또는 구체적 클래스)는 click 에 대한 구현을 제공해야 한다. // 인터페이스 file interface Clickable { fun click() } // 구체적 클래스 file class Button : Clickable { override fun click() = println("I was clicked") }.. 2022. 7. 22.