자바 [Android]
- 자바
본인의 Java 스킬이 어느 정도라고 생각하세요?
상 정도로 생각합니다
NIO에 대해 설명해 주세요.
앞으론 "상" 이라고 안 할 거예요.
NIO(NonBloking/New Input-Output) 써본 적도 없는데 ㅋㅋ
안드로이드는 자바를 이용하기 때문에(아닌 경우도 있지만) 많이 물어볼 거 같지만,
의외로 자바를 안 물어보거나 간단히 물어보는 경우가 종종 있었어요.
기본적으로 자바는 마스터하고 있다고 생각했나 봐요.
광범위한 자바를 모두 다루지 않고 제가 받은 질문들 위주로 글을 쓸게요.
1. 상속성 (Inheritance) : 자식 객체가 부모 객체의 모든 것을 상속받는 것
2. 다형성 (Polymorphism) : 메소드의 기능이 다양해지는 것
3. 은닉성 (Information Hiding) : 외부 프로그램으로부터 정보를 감추는 것
4. 캡슐화 (Encapsulation) : 메소드 내용을 알 필요 없이, 호출 형태만 알면 결과를 얻어낼 수 있는 성질
중요한 개념이지만 경력직한테도 물어보네요.
1. 오버라이딩 : 상속관계에서 부모 메소드 내용을 자식 클래스에서 바꾸는 것.
- 반환 타입이 일치해야 함.
- 부모 메소드의 접근 제한 자보다 자식 메소드의 접근 제한자의 접근 범위가 같거나 넓어야 한다.
- 파라미터 변수의 종류와 순서가 같아야 함.
2. 오버로딩 : 호출 시 그 해당 메소드나 생성자에 매핑되어 호출되도록 인수의 종류나 순서가 다른, 같은 이름의 메소드나 생성자를 정의하는 것.
- 생성자 / 메소드 오버로딩
- 반환 타입 관계없음
- 상속과 관계없음
- 파라미터 변수의 종류나 순서가 달라야 함
1. Stack : 변수 할당 공간
- 질서 정연한 구조
- 변수가 선언되면 stack의 한 부분에 그 변수를 위한 주소가 할당되고, 그 값은 null로 초기화된 상태로 존재한다.
2. Heap : 객체 할당 공간
- 무질서한 구조
- new 연산자에 의해 객체가 생성될 때 heap의 어느 한 주소에 객체가 만들어지고, 그 주소 값은 stack에 할당된 변수에 저장된다.
3. Static : 클래스, 인터페이스, static 자원 할당 공간
- 공유되어지는 공간 구조
굉장히 중요한 개념인데 딱 한 군데에서만 물어봤어요.
아래 Naver D2 사이트에 이해하기 쉽게 설명되어 있어요.
다 읽고 다 이해합시다.
(Naver D2에 다른 자료들도 많이 봤어요.)
http://d2.naver.com/helloworld/1329
1. Collection
- List : 순서가 있고 데이터를 중복해서 포함할 수 있다.
- Stack : LIFO 구조도 되어있음.
- LinkedList
- ArrayList : 배열에 동적 메모리 증가 기능을 구현한 클래스. (동기화 보장 X)
- Vector : ArrayList에 동기화가 보장되도록 최적화한 클래스.
- Set : 순서가 없고 데이터를 중복해서 포함할 수 없다.
- HashSet
- SortedSet - SortedSet 인터페이스를 구현한 TreeSet 클래스. 데이터들이 오름차순으로 정렬.
2. Map
- Key와 Value 형태의 데이터 집합. key는 중복 허용하지 않고 value는 중복 허용.
- HashTable : 내부적으로 Hash 기법을 이용. 동기화를 보장한다. key value에 null 불가능.
- HashMap : 동기화를 보장하지 않는다. key value에 null 가능.
- SortedMap - SortedMap 인터페이스를 구현한 TreeMap 클래스. Key를 기준으로 오름차순으로 정렬.
객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법.
클래스의 데이터 구조에 대한 정보를 이름을 기반으로 동적으로 얻을 수 있다.
같은 안드로이드 개발이라도 어느 분야를 개발하느냐에 따라 자바 면접 질문이 달라지는 거 같아요.
구글에 "자바 면접 질문"을 검색해보면 많은 글이 있는데 한 번씩 읽어보세요.
오래전에 본 면접 질문은 가물가물하네요.
평소 아는 개념이라도 입 밖으로 정리해서 꺼내기가 쉽지 않아요.
근데 입 밖으로 꺼내는 분들이 있으니 공부해야죠..ㅠ