자바기술면접

오민석·2021년 7월 27일
0
post-thumbnail

OOP 5가지 원칙(SOLID)

S (SRP : Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.

O (OCP : Open/Closed Principle)
확장에는 열려(Open) 있으나, 변경에는 닫혀(Closed)있어야 한다.

L (LSP : Liskov’s Substitution Principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

I (ISP : Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

D (DIP : Dependency Inversion Principle)
추상화에 의존한다. 구체화에 의존하면 안된다.

OOP 특징

  1. 캡슐화
    실제로 구현 부분을 외부에 드러나지 않도록 하는 것
    변수와 메소드를 하나로 묶음
    데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근
    ex) public, private, protected
    public : 클래스 외부에서 접근 가능
    private : 클래스 내부에서만 접근 가능
    protected : 상속받은 자식 클래스에서만 접근 가능

  2. 상속
    자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
    기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
    상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해 준다.

  3. 추상화
    인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

  4. 다형성
    어떤 변수,메소드가 상황에 따라 다른 결과를 내는 것

  • 오버로딩(Overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라메터가 다른 것
  • 오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임

Reference
https://velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1

JVM 구조

https://velog.io/@hono2030/JVM%EC%9D%98-%EA%B5%AC%EC%A1%B0
https://velog.io/@emily0_0/OS-Process-Thread

Process, Thread

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

Static?

메모리에 한 번 할당되어 모든 객체가 공유하게 된다.

Static 메소드

객체를 생성하지 않고 static 자원에 접근 가능하다. 단, 인스턴스 생성하고 메소드는 못 부른다

public class ex {
    public static Stinrg name = "name";

    public static int add(int x, int y) {
        return x + y;
    }
}

ex.add(1,2);

Static 변수

절대 변하지 않는 값으로 static을 쓰니까 final 키워드 붙여준다 public static final

사용이유:

  • 메소드가 변하지 않고, 오버라이딩 되지 않는다
  • 전역으로 자주 사용할 메소드

많이 사용하면 단점

  • static은 컴파일타임에 메모리에 잡혀서 필요하지 않아도 GC에서 제거하지 않아서 메모리 낭비

Collection?

Collections와 차이점

Collection는 List, Set, Queue와 같이 자바에서 제공하는 인터페이스의 부모 인터페이스

Collections는 Collection 인터페이스에서 동작하는 메소드를 모아놓은 static method로 구성된 클래스이다. ex. sort(), reverse()

for-each, iterator 차이점

for-each는 iterator와 달리 탐색하다가 자료구조를 삭제 등 변경하지 못한다
exception 터진다

array, LinkedList, List 비교

array도 배열이지만 동적으로 크기를 변경하지 못한다

array:
- (특징)연속된 메모리 공간, 정적
- (장점)인덱싱 검색 유리 / 메모리 관리 편함
- (단점)메모리 낭비, 크기 변동 불가

ArrayList는 array를 이용해서 리스트를 구현한거라 array에 가깝다
Linkedlist:
- (특징)불연속 메모리 공간, 포인터 통한 접근
- (장점)insert/remove 용이, 메모리 재사용
- (단점)검색 성능 좋지 않다, 포인터 통해 데이터 가르켜서 추가적 메모리 공간

Stream

Collection, 배열 등 안에 있는 요소 연산 처리.
데이터객체 -> stream 생성 -> 중개연산(filter / map) -> 최종연산(collect, for-each)

  • 원본 데이터 변경 X
  • 한 번 사용하면 닫혀서 재사용 불가

Final

상수나 메소드, 클래스 정의 후 변경되지 못하게 하기 위해 사용합니다

  • final class
    다른 클래스에서 상속하지 못한다.

  • final method
    다른 메소드에서 오버라이딩하지 못한다.

  • final variable
    변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 된다.

blocking, 동기

sync/async: return 값을 신경쓰는지
blocking/non-blocking: 제어권을 누가 갖고있는지. non-blocking은 자신을 호출한 함수가 자기 일 할 수 있다
https://www.youtube.com/watch?v=oEIoqGd-Sns

@Annotation

메타데이터(metadata). 컴파일 과정과 런타임 과정에서 코드를 어떻게 컴파일하고 처리할것인지를 알려주는 정보

Call by value와 Call by reference

Casting

직렬화(Serialization)

자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술

0개의 댓글