목록Computer (144)
안드로이드 개발자의 창고
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Null 처리 NullPointerException 객체의 주소 값이 담겨져 있지 않는 (null 값이 들어있는) 참조 변수를 통해 객체 접근을 시도하면 발생되는 오류이다. null safe Kotlin 은 개발자가 null이 담겨 있는 참조변수를 통해 객체 접근을 시도할 때 오류가 발생되는 것을 방지하고자 다양한 방법을 제공하고 있다. 이를 통해 null 값에 대한 안정성을 확보(null safe)할 수 있다. !! 연산자 !! 연산자는 null을 허용하는 변수에 담긴 객체의 주소 값을 null을 허용하지 않는 형태의 값으로 변환하는 연산자이다. null을 허용하는 변수에 담긴 값을 null을 허용하지 않는 형태의 변수에 담을 경우 사용한다..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 중첩 클래스란? 클래스안에 만드는 클래스를 중첩 클래스라고 부른다. 내부 클래스는 외부 클래스로부터 생성된 객체를 통해서만 객체 생성이 가능하다. 내부의 클래스를 가지고 만든 객체는 외부 클래스를 통해 만든 객체가 무조건 있다는 것을 보장받을 수 있기 때문에 외부 클래스에 정의한 멤버의 접근이 자유롭다. 외부 클래스는 내부 클래스의 멤버를 자유롭게 사용할 수 없지만 내부 클래스는 외부 클래스의 멤버를 자유롭게 사용할 수 있다. 익명 중첩 클래스 이름이 없는 클래스를 익명 중첩 클래스라고 부른다. 인터페이스나 추상클래스를 사용할 때 이용한다. 인터페이스를 구현한 클래스나 추상 클래스를 상속받은 클래스를 만듬과 동시에 메서드를 Overriding..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Generic 클래스를 설계할 때 변수의 타입을 유동적으로 하고 싶을 때가 있을 수도 있다. 이 때 Generic 개념을 활용하면 클래스 작성시가 아닌 객체 생성 시에 변수의 타입을 설정할 수 있다. 가변성 불변성 : Generic이 설정된 객체의 주소 값을 같은 타입의 제네릭이 설정된 변수에만 담을 수 있다. 공변성 : Generic이 설정된 객체의 주소 값을 부모 클래스 타입의 제네릭이 설정된 변수에도 담을 수 있다(out) 반 공변성 : Generic이 설정된 객체의 주소 값을 자식 클래스 타입의 제네릭이 설정된 변수에도 담을 수 있다(in) 📖 예제 코드 Generic이 설정된 Class class TestClass1{ fun test..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjXPC7/btsgmIK7ylJ/R9sTbBs4BRHoEA9Md1JVB1/img.png)
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Data Class란? DataClass는 매개체의 데이터(객체의 멤버)를 관리하는 용도로 사용하는 클래스이다. abstract, open, sealed, inner 클래스로 정의할 수 없다. 반드시 주 생성자를 가지고 있어야 한다. 주 생성자 작성을 강제하는 이유는 멤버 변수를 무조건 갖게 하기 위함이다. Data Class 는 개발자의 개발 편리성을 위해 몇 가지 메서드가 자동으로 구현된다. equals : 객체가 가지고 있는 변수를 모두 비교하는 메서드 hashCode : 객체를 구분하기 위한 고유한 정수값 copy : 객체를 복제하는 메서드 toString : 객체가 가지고 있는 변수의 값을 출력 componentN : 객체 분해 📖 ..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Companion이란? 클래스를 정의할 때 변수나 메서드를 정적 멤버로 정의하면 객체를 생성하지 않고 사용할 수 있다. Java에서는 static을 사용하는데 Kotlin은 companion객체를 사용하며 다른 점이 없다. 클래스 내에 companion 멤버로 정의된 요소들은 객체 생성 없이 사용이 가능하며 companion 변수의 경우 딱 하나만 생성되어 사용할 수 있다. 만약 Kotlin에서 정의한 Companion 멤버 중 Java에서 사용할 수 있도록 하기 위해서는 @JavaStatic으로 정의해야 한다. 📖 예제 코드 JavaMain.java public class JavaMain { public static int JavaA1 = ..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 인터페이스(Interface)란? Kotlin은 다중 상속을 지원하지 않기 때문에 자기 타입의 변수나 부모형 타입 변수에만 담을 수 있다. 만약 생성된 객체의 주소 값을 다양한 타입의 변수에 담을 수 있도록 한다면 인터페이스를 활용하면 된다. 인터페이스는 클래스가 아니므로 객체를 생성할 때 사용할 수 없다. 단, 클래스는 한 개 이상의 인터페이스를 구현할 수 있으며 생성된 객체는 구현한 인터페이스형 참조 변수에 담을 수 있다. 인터페이스에는 추상 메서드와 일반 메서드 모두를 구현해서 사용할 수 있다. 인터페이스는 추상 클래스와 목적이 비슷하지만 하나의 클래스에 여러 인터페이스를 구현할 수 있는 장점을 가지고 있다. 📖 예제 코드 interfa..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 추상화 추상 클래스 : 추상 메서드를 가지고 있는 클래스 추상 메서드 : 구현되지 않은 메서드 추상 클래스는 구현 되지 않은 추상 메서드를 가지고 있기 때문에 완벽한 설계도라고 할 수 없다. 때문에 추상 클래스는 객체를 생성할 수 없다. 추상 클래스를 상속받은 클래스를 만들고 추상 메서드를 오버라이딩하여 사용한다. 추상 메서드에는 open 키워드를 사용해야 한다. 추상 클래스와 메서드는 abstract 키워드를 사용하며 상속이 가능해야 한다. 클래스에는 open 키워드를 사용해야 오버라이딩이 가능하다. 추상 클래스는 메서드 오버라이딩에 대한 강제성을 주기 위해 사용한다. 📖 예제 코드 fun main() { val t2 = TestClass2..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/0Cm19/btsgnip9km0/5Fk6UT5Bdt4HXTeW9gyS01/img.png)
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Any란? Kotlin에서 사용하는 모든 클래스의 부모 클래스이다. Kotlin은 클래스를 작성할 때 상속받지 않는다면 자동으로 Any 클래스를 상속받는다. Any 클래스에는 모든 객체가 가지고 있어야할 메서드가 제공되고 있으며 이 메서드들을 Overriding 하여 각 클래스의 성격에 맞게 재 구현하여 사용할 수 있다. 모든 클래스는 Any를 상속 받은 상태이기 때문에 모든 객체들은 Any 타입 변수에 담을 수 있다. toString 객체의 정보 문자열을 반환하기 위해 만드는 메서드 println 과 같은 출력문으로 출력하면 toString 메서드를 호출하고 이 메서드가 반환하는 문자열을 이용해 출력하게 된다. equals == 연산자를 사..
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 Overriding(오버라이딩)이란? 부모 클래스가 가지고 있는 메서드를 자식 클래스에서 재정의하는 개념이다. 부모가 가지고 있는 메서드의 이름, 매개 변수 형태 모두 동일해야 한다. 만약 객체가 부모형 참조변수에 담겨 있다면 부모 영역에 정의한 멤버만 사용할 수 있다. 만약 부모의 메서드를 자식에서 Overriding을 했다면 부모형 참조 변수를 통해 자식의 메서드를 호출 할 수 있다. 이는 이벤트 처리 방식에서 사건이 발생했을 경우 개발자가 만든 메서드를 호출하기 위해 사용하는 매우 중요한 개념이다. super 메서드를 Overriding한 경우 부모의 메서드를 호출하고자 한다면 super 키워드를 사용한다. super는 상속관계에서 부모..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/X5GuG/btsgfqRg3sa/MKyoUhuY3UmVIur8kIkh0K/img.png)
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT 📖 지연 초기화란? Kotlin은 프로퍼티를 선언할 때 값을 무조건 설정해야 하는데 이를 지연 시키는 것을 지연 초기화라고 한다. lateinit var 로 선언된 변수의 초기화를 뒤로 미룰 수 있다. 변수의 값을 사용하기 전에 반드시 초기화가 이루어져야 한다. val 로 선언된 변수는 오류가 발생한다. lateinit은 기본 자료형(Int, Double 등)에서는 사용할 수 없다. lazy val로 선언된 변수는 setter()가 생성되지 않기 때문에 lateinit으로 지연 초기화 하는 것이 불가능하다. val로 선언된 변수는 lazy 코드 블록을 이용하면 되는데 이는 나중에 프로퍼티의 값을 셋팅해준다는 의미가 아닌 사용할 때 값을 초기화 한..