본문 바로가기
IT기술 스터디

[스터디 정리] JAVA

by 망망낭낭 2022. 4. 10.
반응형

네이버 블로그로 이전했습니다.

https://blog.naver.com/moongda0404/222729540704

 

[개념 정리] JAVA

뭉다네 일상

blog.naver.com

 

 

 

 

 

 

 

 

 

 

 

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 메모리 구조
반응형

댓글