- Java란?
- 객체지향 언어로 요소들을 객체로 표현하고 상속, 추상화, 캡슐화, 다형성이 특징.
- JVM위에서 동작하기 때문에 운영체제에 독립적이고, GC를 통해 메모리 관리가 가능.
- JVM위에서 동작하기 때문에 실행속도가 조금 더 걸린다.
- JVM이란?
- 운영체제에 종속받지 않고 CPU가 Java를 실행할 수 있게 하는 가상머신
- 자바 컴파일러가 .java -> .class (bytecode) 로 변환하고 나면 JVM이 이 bytecode를 해석해 실행한다.
- 자바 컴파일 과정
- Java 파일 작성 -> java compiler 의 javac 명령어를 통해 .class 생성 -> Class Loader를 통해 JVM 내로 로드 -> 실행엔진(인터프리터 & JIT컴파일러)을 통해 기계어로 해석
- 오버라이딩과 오버로딩
- 오버라이딩 : 상위 클래스에 있는 메소드를 하위 클래스에서 재정의
- 오버로딩 : 파라미터의 타입이나 개수를 다르게 한 같은 이름의 메소드를 여러개 정의하는 것
- OOP란?
- 프로그래밍 구현에 필요한 객체를 파악하고, 상태와 행위를 가진 객체를 만들어 객체간의 상호작용을 통해 프로그램을 만드는 것
- 특징은 상추캡다이고, 모듈 재사용으로 확장 및 유지보수가 용이함
- 추상클래스와 인터페이스
- 인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것이고, 추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함 된 것
- 둘 다 사용하기 위해서는 하위 클래스에서 구현해야하고, 인스턴스 생성이 불가능하다.
- 인터페이스는 인터페이스를 구현하는 모든 클래스에 대해 메소드가 존재하게 하는 강제성이 있고 다중상속이 가능.
- 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화하고 기능 확장을 위해 사용하며 다중상속 불가능.
- 싱글톤 패턴?
- 하나의 인스턴스만을 생성해서 사용하는 패턴으로 private로 생성자를 선언하고, getInstance() 메소드로 받아서 사용하도록 구현.
- 메모리 낭비 방지가 목적이고, 대표적인 예시로 스프링 빈, db 커넥션 풀이 있다.
- 조건문으로 인스턴스 존재 여부 확인 후, 인스턴스를 생성하는 코드가 싱글톤패턴이다
- 자바의 메모리 영역
- 메소드 영역 : 전역변수와 static 변수 저장. JVM동작 후 클래스 로딩시 할당
- 스택 : 지역변수와 매개변수, 메소드 호출시 메모리에 할당되고 종료되면 해제됨. 메소드 호출시 할당
- 힙 : new 로 생성되는 인스턴스, 배열 등. GC에 의해 메모리 관리. 런타임시 할당
- 객체지향의 설계원칙(SOLID)
- SRP 단일책임의 원칙 : 한 클래스는 하나의 책임만 가져야
- OCP 개방폐쇄의 원칙: 확장에는 열려있고 변경에는 닫혀야. 기존 코드를 변경하지 않으면서 확장할 수 있어야.
- LSP 리스코프 치환 원칙: 하위 타입은 항상 상위 타입을 대체할 수 있어야 한다
- ISP 인터페이스 분리 원칙 : 하나의 통합적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다
- DIP 의존관계 역전 원칙 : 구체적인 클래스에 의존하지 말고 상위 클래스, 인터페이스 등 변하지 않을 가능성이 높은 클래스와 관계를 맺어라, DI
- 가비지 컬렉션
- JVM의 메모리 기법 중 하나로 시스템에서 동적으로 할당된 메모리 영역 중 필요 없어진 메모리 영역을 회수하며 관리하는 기법
- 컬렉션 과정은 JVM이 어플리케이션 실행을 멈추고, GC 실행 스레드를 제외한 모든 스레드 작업을 중단한 후(Stop The World 과정) 사용하지 않는 메모리를 제거함
- Synchronized?
- 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없게 하는 것
- String vs StringBuffer vs StringBuilder
- String : 불변
- StringBuffer : 가변, 동기화 지원해 멀티스레드 환경에서 사용
- StringBuilder : 가변, 동기화를 지원하지 않음
- 컬렉션 프레임워크
- 여러 형식의 데이터를 쉽게 관리하기 위해 표준화된 방법을 제공하는 클래스의 집합
- 자바 컬렉션에는 List, Set, Map, Stack, Queue 인터페이스가 있다
- List : 순서 O 데이터 중복 O
- Set : 순서 X 데이터 중복 X
- Map : 키와 값, 키 중복 X, 순서 X
- Stack : new 키워드로 사용
'Java' 카테고리의 다른 글
[Java] 의존관계 주입과 OCP, DIP 준수하기 (feat. Config) (0) | 2021.11.20 |
---|---|
[Java] Collections(2-1)_Map 반복문 도는 여러방식 (0) | 2021.11.03 |
[Java] DTO (Data transfer Object) 란? (0) | 2021.09.13 |
[Java] StringTokenizer (0) | 2021.08.26 |
[Java] Collections(2)_Map 인터페이스 (0) | 2021.08.24 |