자바 컴파일 과정
1. 개발자가 java 코드 생성
2. build
3. javac를 통해 .java 파일을 .class 파일로 바꾼다.
4. class loader를 통해 JVM(Java Virtual Machine) 내로 로드된다.
5. 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석되어 Runtime Data Area에 배치된다.
컴파일러 vs 인터프리터
공통점은 둘 다 사람이 읽을 수 있는 프로그래밍 언어를 컴퓨터가 읽을 수 있는 기계어로 변환해준다.
차이점은 컴파일러는 한꺼번에 컴파일을 하기 때문에 컴파일 시간은 오래 걸리지만 실행 단계에서 이미 기계어로 변환된 파일을 실행하면 되므로 실행 속도는 빠르다. 하지만 컴파일 후에 에러를 알려주기 때문에 에러 수정이 비교적 어렵다.
인터프리터는 바이너리 파일만 실행시키면 되는 컴파일러와 달리 변환과 실행을 동시에 진행한다. 따라서, 프로그램 실행 속도가 느리다. 하지만 코드를 한 줄씩 실행하기 때문에 에러를 바로 알게 되어, 실시간으로 코드 수정이 가능하다.
String, StringBuilder, StringBuffer 차이
String 객체는 불변이기 때문에 변하지 않는 문자열에 사용한다.
StringBuilder는 가변이며, 비동기방식이다. 따라서, Single Thread 환경, 문자열이 변경될 경우에 사용한다. 비동기 방식이기 때문에 처리 속도는 빠르다.
StringBuffer는 가변이며, 동기방식이다. 따라서, MultiThread로 접근하거나 문자열이 변경될 경우에 사용한다.
꼬리 질문 1. thread-safe ?
thread-safe는 멀티 스레드 프로그래밍에서 일반적으로 어떤 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.
자바 접근 제어자
OOP의 4가지 특징
추상화(Abstraction) : 공통 속성이나 기능을 묶어 이름을 붙이는 것 / 클래스를 정의하는 것도 추상화라고 볼 수 있다.
캡슐화(Encapsulation) : 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것 / 비슷한 용어 : 모듈화
상속(Inheritance) : 상위 개념의 특징을 하위 개념이 물려받는 것 / 코드의 재사용성과 확장성을 높인다.
다형성(Polymorphism) : 같은 모양의 코드가 다른 행위를 하는 것 / Overriding, Overloading
[Overriding : 하위 클래스에서 재정의 , Overloading : 같은 이름의 메소드, 매개변수의 유형과 개수가 다름]
OOP의 5대 원칙 (SOLID)
SRP(Single Responsibility Principle) : 단일 책임 원칙, 하나의 클래스는 하나의 책임만 가져야 한다.
OCP(Open Close Principle) : 개방 폐쇄 원칙, 확장에는 열려있고 변경에는 닫혀있다.
LSP(Liskov Substitution Principle) : 리스코프 치환 원칙, 하위 클래스의 인스턴스는 상위 클래스의 인스턴스 역할을 할 수 있어야 한다.
ISP(Interface Segregation Principle) : 인터페이스 분리 원칙, 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다.
DIP(Dependency Inversion Principle) : 의존관계 역전 원칙, 추상화에 의존해야 한다.
추상클래스와 인터페이스 차이
추상클래스 extends / 인터페이스 implements
추상클래스는 자신의 기능을 하위 클래스로 '확장'하는 느낌 (다중상속 불가능)
인터페이스는 정의된 메소드를 각 클래스에 맞게 '구현'하는 느낌 (다중상속 가능)
'객체지향(Java)' 카테고리의 다른 글
Java 자바 기술면접 질문 정리 (2) (0) | 2023.01.24 |
---|---|
객체지향의 사실과 오해 부록A. 추상화 기법 (2) (0) | 2022.11.26 |
객체지향의 사실과 오해 부록A. 추상화 기법 (1) (0) | 2022.11.25 |
객체지향의 사실과 오해 4장. 역할, 책임, 협력 (0) | 2022.11.23 |