
View Binding 먼저, 안드로이드 개발 문서에서 정의하는 View Binding은 아래와 같다. View Binding을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 View Binding은 모듈에 있는 각 XML 레이아웃 파일의 Binding Class를 생성합니다. Binding Class의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함됩니다. 요약하자면, findViewById() 메소드를 사용하지 않고 Binding 객체를 통해 모든 View에 접근할 수 있다는 의미로 해석된다. 기존 View 접근 방식은, 모든 뷰에 대해 findViewById() 메소드를 통해 객체를 생성하여야 한다. 10개의 View가 존재한다면 find..

9.1 예외 처리의 기초 finally 블록 try-catch 구조 다음에 finally 블록을 추가할 수 있다. 자바의 try-catch-finally 구문의 구조와 동작은 아래와 같다. 1) try 블록을 실행하다 예외가 발생하면 try 블록의 실행이 중단되고 catch 블록을 차례대로 검사한다. 예외 타입이 일치하는 catch 블록을 발견하면 해당 catch 블록을 실행하고 마짐가으로 finally 블록을 실행한 후 나머지 프로그램의 실행이 계속된다. 2) try 블록을 실행하다가 예외가 발생했지만 매개변수의 타입이 일치하는 catch 블록을 발견할 수 없는 경우에는 finally 블록을 실행하고 나서 오류 메시지를 출력하고 프로그램이 강제 종료된다. 3) try 블록의 실행에서 예외가 발생하지 않..
8.1 추상 클래스 추상 클래스 정의 추상 메소드는 몸체를 갖지 않으므로 실행할 수 없는 메소드이다. 추상 메소드가 하나라도 포함되면 그 클래스는 추상 클래스(abstract class)로 정의되어야 한다. 클래스를 정의할 때 class 앞에 abstract를 추가하면 추상 클래스가 된다. public abstract class MyShape { protected int x, y; public MyShape(int x, int y) { this.x = x; this.y = y; } public abstract void draw(Graphics g); } 하나 혹은 그 이상의 추상 메소드를 가지는 클래스는 추상 클래스가 되어야 하는데, 추상 클래스는 객체를 생성하지 못한다. MyShape p; p = ne..
Atom. 19 생성자 예제) Wombat class Wombat fun main() { val wombat = Wombat() println(wombat) } 코틀린에서는 자바와 달리 new가 불필요한 중복이기 때문에 제외한다. 예제) Arg class Alien(name: String) { val greeting = "Poor $name" } fun main() { val alien = Alien("Mr. Meeseeks") println(alien.greeting) // alien.name은 에러를 발생시킨다. } 출력 Poor Mr. Meeseeks name은 생성자 안에서 greeting 프로퍼티를 초기화하지만, 생정자 밖에서는 name에 접근할 수 없다. 클래스 본문 밖에서도 생성자 파라미터에..

Atom 04. var와 val var: 변할 수 있는 수(variable)의 약자로, 내용을 재대입할 수 있다. val: 값(value)의 약자로, 식별자의 값을 단 한 번만 초기화할 수 있다. 값을 초기화하고 나면 내용을 변경할 수 없다. fun main() { var whole = 11 var fractional = 1.4 var words = "Twas Brilling" println(whole) println(fractional) println(words) } 출력 11 1.4 Twas Brilling 변할 수 있는 수라는 이름처럼 var에 저장된 값은 달라질 수 있다. 즉, var에 저장된 데이터를 변경할 수 있다는 뜻이다. 그래서 var 변수를 가변(mutable)이라고 한다. fun mai..