안드로이드 기술면접 대비 및 정리 1(Kotlin, Java)

뭉삐·2024년 5월 16일
post-thumbnail

기술면접에서 물어보는 이론 지식들은 면접을 준비할때만 보고 막상 회사업무를 하다보면 점점 흐릿하게 기억이나는거 같아요. (뭔가 머리로는 이해하고있는데 설명은 못하는)
그러면 또 나중에 면접을 볼때 급하게 준비하게되고.. 계속 반복되는거같아요.
면접을 앞두고있는건 아니지만 한번 정리를 해보겠습니다.

Java

접근제어자 종류 및 설명

- private : 선언된 클래스,함수 내에서만 접근이 가능.
- protected : 선언된 클래스,함수 + 상속관계에 있는 하위 클래스에서 접근가능. 패키지가 같아야한다.
- public : 어떤 클래스나 패키지에서든 접근이 가능하다.
- default : 같은 패키지 내에서만 접근이 가능하다.

객체지향 5원칙(SOLID)

객체지향 프로그래밍에서 사용되는 다섯가지 원칙의 앞글자를 딴 약어. 각 원칙은 설계를 유연하게하고 확장 가능하며 유지보수하기 쉽게 만들기 위해 고안되었다.

- SRP (Single Responsibility Principle - 단일 책임 원칙) : 하나의 클래스는 하나의 책임만을 가져야한다.
- OCP (Open-Closed Priciple - 개방-폐쇄 원칙) : 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 합니다. 즉 수정없이 추가 변경이 가능해야한다.
- LSP (Liskov Substitution Priciple - 리스코프 치환 원칙) : 부모 클래스의 인스턴스는 언제나 자식 클래스의 인스턴스로 교체할 수 있어야 한다. (상속과 다형성)
- ISP (Interface Segregation Principle - 인터페이스 분리 원칙) : 클라이언트는 자신이 사용하지않는 메서드의 의존을 강요받아선 안된다. 즉 인터페이스는 클라이언트에 필요한 기능만 포함해야한다.
- DIP (Dependency Inversion Principle - 의존성 역전 원칙) : 추상화에 의존해야 하며 구체화에는 의존하면 안 됩니다. 즉, 클래스는 구체적인 구현이 아니라 인터페이스나 추상 클래스와 같은 추상화에 의존해야 한다.

객체지향 4가지 특징

- 캡슐화 (접근제한자) : 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐로 만드는 방법.
- 추상화 : 클래스들의 공통적인 특성(변수,메소드)들을 묶어 표현하는것
- 다형화 : 다양한 형태로 표현이 가능한 구조(오버로딩,오버라이딩)
- 상속화 : 부모클래스에 정의된 변수 및 메소드를 자식 클래스에서 상속받아 사용하는것

클래스와 객체란

- 클래스 : 클래스는 객체지향 프로그래밍에서 객체를 생성하기 위한 템플릿 또는 청사진이다. 클래스는 객체의 상태를 나타내는 속성행위를 정의하는 메서드로 구성된다.
- 객체 : 객체는 클래스의 인스턴스로 메모리에 할당된 것을 의미한다. 즉, 클래스는 추상적인 개념이고 객체는 선언된 실제로 존재하는 구체적인 인스턴스이다.

추상화

- 추상화 : 추상화는 프로그래밍에서 복잡한 개념이나 시스템을 단순화하고 필수적인 요소만을 강조하여 모델링 하는 과정이다. 추상화를 통해 세부사항을 숨기고 핵심 개념을 이해하기 쉽게 만들 수 있다.

Kotlin

val , var 차이

- val : val은 한번 초기화되면 값을 변경할 수 없다. 자바의 Final과 유사.
- var : 초기화 이후에도 값을 변경할 수 있다.

lateinit, by lazy

- lateinit : var 변수를 바로 초기화하고 싶지 않은경우 사용. 사용시 데이터 타입은 필수로 선언해주어야 하며 선언을 하지않고 변수의 값을 호출하면 에러가 발생하는데 컴파일 단계에서 에러가 발생하기 때문에 잠재적 오류를 방지해준다.
- by lazy : val 변수를 선언하는 순간에는 초기화가 불가능하지만 이후에 의존하는 값들이 초기화 되고나서 값을 채워넣고 싶을 때 사용한다. 즉, '호출시'에 어떻게 초기화할지를 정의하는 구문이다.

Null Safe

- Nullable 타입 : 변수 또는 반환타입에 ?를 붙이면 Nullable 타입이 된다. 해당 변수 또는 표현식은 null일 수 있다는뜻.

val nickname : String? = null

안전 호출 연산자(?) : nullable에 접근할때 안전 호출 연산자(?)를 사용하여 null check를 할 수 있다. null인경우에만 접근하며, null인 경우에는 null을 반환한다.

val length = nickname?.length

엘비스 연산자(?:) : 아주 귀여운 연산자, 90도 돌리면 엘비스를 닮았다고 엘비스연산자. 좌측의 객체가 null 인경우 우측에 있는 값을 기본값으로 반환한다.

val length = nickname?.length ?: 0

Non-null 단언 : Nullable 객체를 Non-null 타입으로 강제로 캐스트한다. 단 객체가 null 인경우 NullPointerException을 발생시키므로 되도록이면 사용하지않는게 좋다.

Scope function

Scope function을 사용하면 객체의 범위 내에서 코드를 더 간결하고 가독성 있게 작성할 수 있도록 도와줍니다. 각 상황에 맞는 Scope 함수를 사용하면 된다.

profile
kotlin 주력 앱개발자

1개의 댓글

comment-user-thumbnail
2024년 7월 10일

면접을 앞두고 있는데 감사합니다.

답글 달기