Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

JAVA 기술 면접 대비 본문

TID (Today I Do)

JAVA 기술 면접 대비

작지 2022. 2. 24. 21:16

어쩌다가 면접 기회가 찾아왔는데 이왕 기회가 찾아온거 JAVA기본을 조금 정리하고자 써봤습니다.

걍 내가 알고싶은거 정리한 느낌으로 그냥 따악 적어보기

 

JAVA의 장단점에 대해 설명.

장점

  • 멀티 스레드
    • C, C++ 등의 언어들은 자체적으로 멀티 스레드를 지원하지 않고, 운영체제의 도움을 받음
    • 자바는 운영체제 없이 독립적으로 실행이 가능.
    • 하지만 최근 언어들은 멀티 스레드를 대부분 제공을 해서 굳이 장점? 이라고는 말 못한다고 한다.
  • 플랫폼 독립성
    • 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 바이트 코드로 컴파일됨
    • JVM만 있으면 하드웨어 운영체제와 상관없이 자바 프로그램이 실행 가능

단점

  • 컴파일 과정이 늦고 응답이 늦다. 서버에는 쓰이지 않음.
  • 예외처리를 직접 처리해야 하고 하지 않으면 컴파일이 안됨.

 

객체지향언어

 

  • JAVA는 객체 지향 언어로서 클래스 계층 구조, 상속성 다형성 캡슐화 추상화 등을 지원합니다.

장점

  • 상속을 통해서 프로그래밍 코드의 재사용이 가능
  • 잘 설계된 클래스를 만들어서 독립적인 객체를 사용이 가능, 생산성의 향상
  • 객체 지향적이기 때문에 하나의 오류가 발생한다면 유지보수가 쉽기 떄문에 경제적입니다.

단점

  • 각 클래스에 대한 이해도가 높아야 하기에 설계단계부터의 시간이 많이 걸립니다.
  • 실행속도가 느립니다
  • 다중 상속이 이루어졌을 경우 복잡해져 어려워 질 수 있습니다.

 

컴파일 과정

  • 개발자가 .java 파일을 생성하고
  • build -> java compiller의 javac의 명령어를 통해서 바이트코드로 변환
  • class loader를 통해서 jvm내로 로드
  • 실행엔진을 통해서 컴퓨터가 읽을 수 있는 기계어로 해석.
  • Runtime Data Area에 저장

https://asfirstalways.tistory.com/158

 

JVM 설명은 너무 길어지므로 링크로 대체

 

https://steady-coding.tistory.com/305

 

JVM 메모리 구조란? (JAVA)

안녕하세요? 코딩 중독입니다. 오늘은 JVM 메모리 구조에 대해 알아보겠습니다. JVM이란? JVM 메모리 구조를 설명하기 전에 JVM이 무엇인지 알아야 합니다. JVM은 Java Virtual Machine의 약자로, 자바 가상

steady-coding.tistory.com

컴파일러와 인터프리터의 차이?

  • 간단하게 이야기하면 인터프리터는 소스코드의 각 행을 연속적으로 분석하고 기계어로 변환

    인터프리터는 고레벨 언어를 중간 코드로 변환하고 각 행마다 실행.
  • 컴파일러는 전체 소스코드를 변환 한 뒤에 에러를 보고하지만
    인터프리터는 각 행마다 실행하는 도중 에러가 보고하고 이후에는 체크를 하지 않는다.
  • 각 행마다 실행하기 떄문에 인터프리터는 컴파일러에 비해서 느리다.

 

오버로딩과 오버라이딩 차이점.

  • 오버로딩은 메서드의 이름이 같고 매개변수의 갯수나 리턴 타입이 다른 함수를 정의


  • 오버라이딩은 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것.

 

추상 클래스와 일반 클래스의 차이점.

  • 가장 큰 차이점은 추상 클래스는 객체화가 불가능 하지만 일반 클래스는 가능하다 정도

 

추상 클래스와 인터페이스의 차이점.

  • 추상 클래스 : 클래스 필드값 설정 가능 / 메소드 내부 코딩이 가능

    추상 클래스는 상속 받은 클래스의 기능 확장을 위해 쓰임.
  • 인터페이스 : 클래스 x 필드값 설정 불가능 (상수만 가능) , 메소드 이름나 지정 가능
    쉽게 말해서 껍데기만 만들 수 있음.

TreeSet이란

  • Treeset은  SortedSet, Set, Collection 및 iterable 인터페이스를 계층 적 순서로 구현됩니다.
  • 항상 오름차순으로 저장되기 떄문에 만약 D,C,B,A 의 값을 삽입하면 A,B,C,D로 저장됩니다.
  • 다만 하나의 형태만 저장이 가능합니다. EX) 1, "KIM"이 들어가면 인식을 못함.

HashSet이란

  • Collection 및 iterable 인터페이스를 상속하고 있습니다.
  • 삽입 된 순서를 보장하고 있지 않습니다. A B C 를 삽입 했을 경우 C A B 처럼 저장이 될 수 있습니다.
  • 또한 A,A,B,B,C,C, 를 저장했을 경우 A,B,C 처럼 저장이됨 == 중복을 제외해버림

TreeMap

  • key에 이진 탐색트리가 박혀있고 key는 null 값이 허용이 안됨.

HashMap

  • key null 값이 한번만 허용됨 이유는 중복이 허락되지 않아서

 

MVC 패턴

  • Model , View, Controller 세 가지로 나눈 패턴입니다.


  • Model은 애플리케이션의 정보, 데이터를 나타내고 있습니다.
  • Mode은 view, controller에 대한 정보가 있어서는 안됩니다.
  • 변경이 일어나면 변경에 대한 처리방법을 구현해야 합니다.

  • View는 사용자가 눈으로 확인하는 부분을 말합니다. 텍스트 입력, GUI , 출력 등
  • 데이터를 기반으로 사용자들이 볼 수 있는 화면을 뜻합니다.
  • 또한 Model이 가지고 있는 정보를 따로 저장해서는 안됩니다.
  • Model과 마찬가지로 컨트롤러나 모델에 대한 정보가 없어야 합니다.
  • 변경이 일어나면 변경에 대한 처리방법을 구현해야 합니다.


  • Controller는 Model과 View의 중간 다리의 역할입니다.
  • 사용자가 데이터를 수정하고 읽는 것에 대한 이벤트들을 처리하는 부분입니다.
  • 모델이나 뷰에 대해서 정보를 읽을 수 있어야 합니다.
  • 모델과 뷰의 변경을 모니터링 해야합니다.



  • MVC패턴을 왜 사용하는가.
  • M V C에 대해서 각자의 역할에 집중할 수 있도록 개발을 하면 유지보수성과 확장성 유연성이 증가
  • 중복코딩의 문제점이 사라짐.

 

 

스레드(thread)란?

  • 스레드는 프로세스 내에서 실제로 작업을 수행하는 주체
  • 두 개 이상의 스레드를 가지는 프로세스는 멀티스레드 프로세스라고 부릅니다.

 

데몬스레드(daemon thread)

  • main 쓰레드가 동작할떄 뒤에서 동작하는 쓰레드, main 쓰레드가 종료 될 떄 같이 종료가 됩니다.

 

 

캡슐화 은닉화 차이점

캡슐화

  • 캡슐화는 메소드와 변수들을 클래스 하나로 묶는 것
  • 객체 외부에서 내부 정보를 직접 조작하거나 접근할 수 없게 만들고
  • 외부에서는 정의된 오퍼레이션을 통해서만 관련 데이터에 접근 할 수 있도록 하는것 (GETTER, SETTER)

은닉화

  • 객체가 실행되는 과정이나 속성을 외부로부터 감춰버리는 것
  • 인스턴스 변수에 접근을 바로 못하게 private를 선언해버리면 된다.

 

 

String , StringBuilder, StringBuffer의 차이

 

  • String 객체 불변이기 때문에 변하지 않은 문자열은 String을 사용한다.
  • StringBuilder는 비동기 방식이기 떄문에 Single Thread 환경하에서 변화되는 문자열을 사용. 처리속도가 빠름
    메서드 내에서 변수를 선언했다면 해당 변수는 그 메서드 내에서만 살아있기 때문에 StringBuilder를 사용


  • StringBuffer는 동기방식으로 저장되기 떄문에 멀티쓰레드로 접근하거나 문자열이 변경될 경우에 사용
    클래스에 static으로 선언한 문자열을 변경하거나, singleton으로 선언된 클래스에 선언된 문자열이라면
    StringBuffedr를 사용해야함.

String 이 불변객체인 이유

 

자바에서는 상수 풀 이라는것이 있는데 만약 String a = "String1" 이라는 것이 존재한다면

main 실행 시 상수 풀에 a에 해당하는 문자열을 상수 풀에 등록을 합니다.

 

그런데 String b = "String1"이라는 문자열도 있었다면 이미 상수 풀에 String1 이라는 문자열이 존재하기 떄문에

상수 풀에서 같은 레퍼런스 값을 반환합니다. 문자열 리터럴을 캐싱하고 재사용하면 힙 공간을 많이 절약할 수 있기 때문입니다.

 

이유라고 하는게 맞지는 모르겠지만 불변 객체는 값이 바뀌지 않으므로 멀티스레드 환경에서 thread-safe하다는 장점이 있습니다.

 

문자열 개체는 데이터 구조로 사용되기 때문에 hash에서 사용이 잘 됩니다.

 

또한 보안성의 문제가 있습니다. 만약 String이 불변객체가 아니라면

메소드가 호출된 클라이언트가 String에 대한 참조를 계속 가지고있기 때문에

 

변경이 되거나 다른 스레드에 표시 될 수 있으며 무결성 검사 후 변경 될 가능성이 있습니다.

 

java 접근 제어자

public , protected, private, default 의 특성

public 외부클래스 O 상속 관계 O 외부 패키지 O 같은 클래스 O

protected 외부 클래스 O 상속 관계 O 외부 패키지 X 같은 클래스 O

default 외부 클래스 O 상속 관계 X 외부 패키지 X 같은 클래스 O

private 외부 클래스 X 상속 관계 X 외부 패키지 X 같은 클래스 O

 

 

OOP의 4가지 특징

 

추상화

캡슐화

상속

다형성

OOP의 5대 원칙 SOLID

SRP 단일 책임 원칙

 

OCP 개방 패쇄 원칙

 

LSP 리스코프 치환 원칙 ( 하위 클래스의 인스턴스가 상위 클래스의 인스턴스 역할을 하는게 문제가 없어야 함)

 

ISP 인터페이스 분리 원칙 ( 인터페이스에는 상황에 맞는 메서드만 제공하라는 것.
구현하지 않은 인터페이스는 사용하지 않아야함)

 

DIP 의존성 역전 원칙 ( 의존 관계를 맺을 때 변화하기 쉬운 것에 의존하지 말고 변화하지 않는 것에 의존 하라)

 

 

클래스, 객체, 인스턴스의 차이

클래스는 객체를 만들어 내기 위한 설계도 , 틀

 

객체 소프트웨어에서 구현할 대상

 

인스턴스는 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체

인스턴스는 객체에 포함이 된다.

 

CheckedException , UnCheckedException 의 차이

UnCheckedException은 RuntimeException을 상속하지 않는 클래스입니다.

반대로 CheckedException은 상속하지 않는 클래스로 분류되어 있습니다.

그래서 CheckedException은 개발자가 꼭 명시적으로 처리를 해줘야 합니다.

 

스프링일 경우에는 UnCheckedException일 경우에는 롤백 처리를 한다.

@Transactional 옵션에 rollbackfor 는 디폴트 값이 RuntimeException, error

 

대표적인 CheckedException = IOException, ClassNotFoundException

UnCheckedException = NullPointException, ClassCaseException

 

 

Call by Reference , Call by Value 의 차이

Call by value = 값에 의한 호출

인자로 받은 값을 복사하여 처리를 함,

장점 : 복사하여 처리하기 떄문에 안전, 원래의 값이 보존이 된다.

단점 : 복사를 하기 때문에 메모리 사용량이 장난이 아니다.

 

함수가 호출이 되면 메모리 공간 내에서 임시 공간이 생기고 종료될 떄 삭제된다.

함수 호출시 전달되는 변수의 값을 '복사' 하여 인자로 전달.

복사된 인자는 함수 안에서 지역적으로 사용하는 변수.

 

 

Call by Reference = 참조에 의한 호출

인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줌

장점 복사하지 않고 직접 참조를 하기에 빠르다.

단점 직접 참조를 하기에 원래 값이 영향을 받는다.

 

함수가 호출될 떄 메모리 공간 안에서 함수를 위한 별도의 임시 공간 생성 및 종료시 삭제

함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달

함수 안에서 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.

 

자바는 어디에 해당하는가?

 

자바는 기본 자료형에는 call by value가 적용이 되고 EX) int, shot, long, char 등등

참조 자료형 에서는 call by reference로 동작 EX) class, Array 등

 

 

 

'TID (Today I Do)' 카테고리의 다른 글

CRA 없이 직접 React 빌드해보기.  (0) 2023.07.27
CORS란?  (0) 2022.01.27
spring @Transactional  (0) 2022.01.26
REST 개념공부  (0) 2022.01.25
Comments