1. 클래스 / 객체(오브젝트) / 인스턴스 차이
2. final / finally/ finalize 차이
3. 추상클래스 / 인터페이스 차이
4. 다형성(오버로딩, 오버라이드, 형 변환)
5. static : 클래스에 위치 (메소드 영역) --> 한 클래스에서 생성된 객체들이 공유.
main함수도 static. 클래스 로더에 의해 가장 먼저 적재(로딩)
객체 생성없이 바로 사용할 수 있다. 대신 인스턴스 멤버(필드, 메소드)에 접근 불가.
인스턴스 멤버는 객체 생성 후 사용할 수 있음.(객체 고유의 값들..)
인스턴스 메소드는 객체들이 공유하는 부분이므로 메소드영역에 저장되어 객체들이 공유
6. 접근제한자(Access Modifier) : public < protected(동일 패키지 & 다른 패키지의 자식클래스) < default(동일 패키지) < private(클래스 내부)
7. 자동타입변환.
동물 ---> 고양이("샘")
---> 개
Animal animal = new Cat("샘"); //자식 객체를 부모 객체로 취급.
--> 이렇게 되면 자식에서 재정의된 메소드 및 부모 메소드만 사용 가능. 자식 고유의 메소드 사용불가.
--> 자식꺼 쓰고 싶으면 다시 자식 타입으로 강제타입변환 해야된다.
Cat cat = (Cat) animal;
Dog dog = (Dog) animal; --> ClassCastException 발생.
8. 추상클래스 : 실체클래스가 공통적으로 가지는 기능에 대해 확장. 추상메소드, 일반메소드로 구성
인터페이스 : 추상메소드와 상수로만 구성. 구현을 위한 것. 다른 구현 객체들의 공통된 동작을 위함. 다중 상속 가능.
Abstract Class, Interface 모두 javac에 의해 .java에서 .class파일로 컴파일.
9. 익명 객체 : 클래스 정의 없이 특정 위치에서만 사용하기 위해 필요한 부분에서만 사용하는 객체
10. 로컬클래스 : 메소드 내에 위치한 클래스. 메소드 내 인스턴스에 접근 불가. final로 정의된 변수에만 접근가능. java8부터 메소드 내에 final 안써도 자동으로 final화 되어 컴파일된다.(?) 클래스이므로 메소드 영역에 저장. 메소드는 종료 후 스택에서 빠지게 되므로 값을 못읽음. 하지만 상수라면 메소드영역의 constant pool에 저장되어 읽어오기 가능.
11. 예외 -> 예외 클래스로 구성. 상위 : java.lang.Exception
Checked Exception : 컴파일 타임에 잡히는 예외
Non-Checked Exeption(java.lang.RuntimeException) : ClassCastE(타입변환 시), NumberFormatE(문자형 숫자가 아닌 문자를 숫자로 변경할 시), ArrayOutOfBoundE(인덱스 넘어갈 시), NullPointerE(Null을 가리키고 있는 거 사용할 때, ArithmeticE(정수형에서 / by zero) etc...
실수형에서 0으로 나누게 되면 무한대 출력. (C++, Java) / 파이썬은 에러남
12. 제네릭 : 컴파일타임에 안잡히는 오류 -> 런타임 오류를 방지하기 위해 변수, 메소드, 클래스 선언 시 쓰이게 될 타입을 미리 지정함.
(타입은 참조형으로 표시. String, Array, Wrapper(Integer, Character etc)
13. AOP : Aspect Oriented Programming. OOP를 더 OOP 답게.
핵심모듈과 공통 모듈을 분리해서 개발. 공통모듈 : 핵심모듈과 구분되는 로깅, 예외처리 등.
14. Try - Catch - Finally ===> Try-with-resources
15. Collection Framework
List
- ArrayList (가변형. Array는 고정형)
- Vector (동기화)
- LinkedList (우리가 아는 링크드 리스트. 검색이 O(n))
Set
인덱스가 없어 iterator호출해서 접근
-HashSet (Hashcode(), equals()로 중복 데이터 검사)
-TreeSet (레드블랙트리 구조)
Map
-HashMap (파이썬 딕셔너리 느낌. 동기화 검사하는 로직이 없으므로 싱글 스레드에서 HashTable보다 빠름.)
-HashTable (동기화)
-ConcurrentHashMap (동기화, 해쉬테이블보다 빠르다. 자료구조 전체에 락을 안걸어서)
-TreeMap (레드블랙트리 구조)
-LinkedHashMap (순서 지킴. 파이썬 defaultDict())
16. JVM 구조
17. String(immutable) /, StringBuilder, StringBuffer(동기) (mutable)
'DevOps' 카테고리의 다른 글
기타 (0) | 2020.11.21 |
---|---|
데이터베이스 (0) | 2020.11.20 |
컴퓨터 네트워크 (0) | 2020.11.20 |
운영체제(OS) / 컴퓨터구조 (0) | 2020.11.20 |
자료구조, 알고리즘 (0) | 2020.11.20 |