네이버 블로그로 이전했습니다.
https://blog.naver.com/moongda0404/222729540704
JAVA
- Interface 란? 역할 : 다중 상속을 사용하기 위한 교각 역할
> 종류 : 상수 / 추상 메소드 / 디폴트 메소드 / 정적 메소드
- 추상클래스와 인터페이스의 차이
> 다중 상속 가능 여부, 하나의 기능만 사용한다면 추상클래스, 오버라이딩 등 사용은 인터페이스
- 접근 제한자
1. public : 제한 없음
2. private : 해당 객체 내부
3. protected : 패키지 내에서 객채와 상속 관계인 경우
4. default : 패키지 내 해당 객체 (범위 : protected > default)
- JDK1.8 추가 사항
1. 스트림 API : List, Array 등의 데이터 처리를 정렬식으로 표현
2. Lambda Expression : 기존 함수의 문법과 비교해 간결하게 표현 가능 및 병렬 처리 가능
3. Method references 메소드에 코드를 전달하는 기법
4. 인터페이스의 디폴트 메시지
- OOP
OOP : 추상화 / 캡슐화 / 상속 / 다형성
-함수형언어 : 실행 결과를 입력값에 의존하도록 설계 > 객체간 의존성 적음
-인터프리터 : 행단위의 실행(python, LISP 등)
-컴파일러 : 전체 컴파일 후 실행(JAVA, C)
OOP 5대 원칙 SOLID
-SRP(Single Responsibility Principle) : 각 모듈은 하나의 기능만 수행
-OCP(Open-Close Principle) : 확장은 Open, 수정은 Close
-ISP(Interface segregation principle) : 목적에 따른 인터페이스 분리
-LSP(Liskov Substitution Principle) : 자식 클래스가 부모 클래스의 모든것을 온전히 표현 할 수 있어야함
- java의 non-static 멤버와 static 멤버의 차이 : 컴파일 시점에서 JVM 메모리에 올라가느냐 아니냐의 차이
- 제너릭이란? 제너릭 사용방법 :
-제너릭 : 특정 타입을 지정하지 않고, 사용자가 선언 시점에서 정해주는 것
-사용방법 :
public class ClassA <E> { //E, T, K 등
private E element;
void set(E element){
this.element = element;
}
E get(){
return element;
}
- Override 란?
>상위 클래스 함수를 하위 클래스가 재정의하여 사용
- Final : 한번 정의 후 재사용 불가(상수값으로 지정)
-멤버 변수 : 선언 시점 이후 변경 불가
-메소드 : 전달받은 인자값의 변경 불가
-클래스 : 생성자 선언 후 재선언 불가
- 메소스의 override 를 막는 방법
-private : 사용 불가
-protected : 상속관계/동일 패키지에서만 사용 가능
-default : 같은 패키지에서만 사용 가능
-public : 제한 없음
- 동기화와 비동기화의 차이(Syncronous vs Asyncronous)
-동기화 : 멀티스레드 제한, 순차적인 접근
-비동기화 : 멀티스레드, 콜백 함수로 결과 확인
- Try catch java run with resources
>Try 구문 내에 객체를 선언하여, finally 없이 자동으로 close되도록 하는 방법
- 에러와 예외의 차이는?
>개발자가 처리 가능한지에 대한 유무
- 테스트코드 작성 방법, junit
>
- Annotation?
>컴파일 과정에서 실행할 코드에 대해, 어떤 방식으로 처리할 것인지를 가이드 해줌
- 자바 thread 구현방법
public class Test {
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Runnable r = new Thread2();
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class Thread1 extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName());
}
}
}
class Thread2 implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName());
}
}
}
- Thread 상속 Runnable 구현 비교하기
-상속 : Thread 클래스를 직접 상속
-Runnable : Thread 클래스의 currentThread()를 참조
- 함수형 인터페이스 : 1개의 추상메소드를 가진 인터페이스
- Call by value Call by reference
- value : 순수하게 값만 전달(별개의 변수)
- reference : 주소를 기반으로 동일한 변수를 제어(C의 포인터)
- Jvm 메모리 구조
댓글