본문 바로가기
[개발] 프로그래밍/Web, Spring, Java

백엔드 면접 기초 질문 답변(1~20)

by 안산학생 2021. 2. 5.

▲ 필기 원본


 

1. 컴포넌트와 모듈의 차이

모듈과 컴포넌트는 비슷하지만 모듈이 컴포넌트보다 큰 단위라고 생각합니다.

컴포넌트는 하나의 부품입니다. 보통 작은 영역에서 서로 관련되어 있고 다용도로 사용이 가능하게 만듭니다. UI를 제어하는 타이머같은 Back단에서 스레드를 보조하는 컴포넌트를 예로 들 수 있습니다.

모듈은 조금 작은 범위의 조각입니다. 외부 인터페이스가 없는 복합적인 수요기능에서 실행될 수 있는 단위 입니다. 데이터베이스나 이메일 같은 통합적인 기능을 제공하면서 라이브러리처럼 사용될 수 있는 것들 입니다. 그리고 호환성이 더 좋습니다.

 

2. 자바란 무엇인가

자바는 객체지향프로그래밍 언어로서 보안성이 뛰어나며 컴파일한 코드는 다른 운영체제에서 사용될 수 있도록 클래스로 제공됩니다. C++언어의 객체지향적인 장점을 살리면서 분산환경을 지원해 효율적입니다.

 

3. 자바의 구동원리

자바로 작성한 코드는 [.java]라는 확장자를 가지며 자바에 존재하는 javac라는 전용컴파일러가 [.java]로 끝나는 자바코드를 컴퓨터가 이해할 수 있도록 프로그래밍 언어를 기계어로 변경하게 되면 [.class]라는 확장자를 가진 파일이 생성되는데 [.class]파일은 JVM을 통해서 실행됩니다.

 

4. JVM의 특징

자바 가상머신이라 불리며 자바소스로부터 만들어진 바이너리파일 즉 [.class]파일을 실행하기 위해 필요합니다. java가 OS에 구애받지 않고 재사용가능하게 해줍니다. 그리고 자동메모리관리기법인 Garbage Collection을 수행합니다.

+ JRE : 자바실행환경. JVM으로 자바프로그램을 동작시킬 때 필요한 파일들을 가지고 있습니다.
+ JDK : JAVA 개발을 하기위해 필요한 환경입니다. JDK에는 JRE가 포함되어 있습니다.

 

5. 객체지향과 절차지향의 차이점

절차지향 프로그래밍이란 물이 위에서 흐르는 것과 같이 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다. 컴퓨터의 처리구조와 유사해 실행속도가 빠르다는 장점이 있습니다. 반면 유지보수가 어렵고 실행순서가 정해져있어 코드의 순서가 바뀌면 결과값이 달라질 수 있고 디버깅이 어렵다는 단점이 있습니다.

객체지향은 실제세계를 모델링하여 소프트웨어를 개발하는 방법입니다. 마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법입니다. 코드의 재활용성이 높고 디버깅이 쉬운 장점이 있으며 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요되는 단점이 있습니다.

 

6. 객체지향 언어의 특징

- 캡슐화 : 관련된 데이터와 알고리즘이 하나의 묶음으로 정리된 것으로써 데이터를 감추고 외부세계와는 메소드를 통해 상호작용합니다.

- 상속 : 이미 작성된 클래스를 이어받아 새로운 클래스를 생성하는 기법으로 기존 코드를 재활용해서 사용합니다.

- 다형성 : 하나의 이름으로 많은 방법에 대처하는 기법입니다.

 

7. 상속과 구현의 차이점과 특징 및 장단점

 

8. 오버라이딩과 오버로딩의 차이점과 특징

오버로딩은 '많은 것을 싣는다', 오버라이딩은 '재정의한다'는 사전적 의미를 가진 만큼 차이점도 이와 비슷하다고 볼 수 있습니다.

오버로딩은 하나의 클래스 안에서 인스턴스 개수나 형식이 다른 동일한 이름의 메소드를 여러 개 정의하는 것이고 정적 바인딩입니다.

오버라이딩은 상속을 했을 경우에 적용할 수 있고, 기존의 내용의 틀만 가져와서 재정의 하는 것이고 동적 바인딩입니다.

 

9. 기본형 변수와 참조형 변수는 무엇이 있나?

자바가 제공하는 기본형 변수는 총 8가지로 char, byte, short, boolean, int, long, float, double이 있습니다.

참조형은 값이 저장된 곳의 메모리 주소를 저장하는 공간으로 객체의 주소를 저장합니다. 자바에서 기본형 변수 8가지를 제외하고는 모두 참조형입니다.

 

10. 스택 오버플로우가 왜 일어나는가?

스택포인터가 스택의 경계를 넘어 설 때 일어납니다. 호출 스택은 제안된 양의 주소공간을 이루며 프로그램 시작 시 결정됩니다.

 

11. 메모리 누수가 무엇인가?

프로그래밍에서 메모리 누수현상은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다.

자바에서 메모리누수는 더 이상 사용하지 않는 객체가 가비지컬렉션(GC)에 의해 회수되지 않고 누적되는 현상입니다. old영역에 누적된 객체로 인해서 메이저 GC가 빈번히 발생하게 되고 프로그램의 응답속도가 늦어지다 결국 Out of memory 오류로 프로그램이 종료됩니다.

 

12. 메모리 누수를 막기위한 방법

가장 좋은 방법은 참조값을 갖는 변수가 최소한의 유효범위안에 있도록 하는 것입니다. Local변수로 만들 경우 자동으로 GC의 대상이 되는 것을 예로 들 수 있습니다.

 

13. Static에 대한 설명

Static키워드를 사용한다는 것은 어떠한 값이 메모리에 한번 할당되어 프로그램이 끝날 때 까지 그 메모리에 값이 유지된다는 것을 의미합니다. 쉽게 말해 특정한 값을 공유해야하는 상황이라면 Static 사용 시 메모리의 이점을 얻을 수 있습니다.

 

14. 싱글톤 패턴이 무엇인가? 디자인패턴이란?

어플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴
 - 쓰는 이유 : 1. 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기에 메모리 낭비 방지
                  2. 인스턴스가 한개만 존재하는걸 보증하고 싶을 때
                  3. 두번째 이용부터 객체로딩시간이 줄어 성능 향상
 - 문제점 : 싱글톤 인스턴스가 너무 많은 일을 하면 결합도가 높아져 '개방-폐쇄' 원칙 위반(=객체지향 설계 원칙에 어긋남)

디자인패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고절적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책

 

15. 익명클래스와 익명객체란?

익명클래스란 클래스의 이름이 없는 것을 말합니다. 인터페이스를 구현하기 위해 해당 인터페이스를 구현할 클래스를 생성해야하는데 일회성이고 재사용할 필요가 없다면 굳이 클래스를 만들필요없이 익명클래스를 사용합니다.

 

16. JAVA문자열 검색

indexOf("문자열"), contains("문자열"), matches(정규식포함문자열)

 

17. 자료구조 특징, 장단점

 

18. 스레드는 무엇이고 언제 쓰이는가?

하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업단위를 말하며 세부적으로는 운영체제에 의해 관리되는 하나의 작업(task)를 의미합니다.

JVM에 의해 하나의 프로세스가 발생되고 main()안의 실행문들이 하나의 스레드입니다. main() 이외의 스레드를 만드려면 Thread클래스를 상속하거나 Runnable 인터페이스를 구현합니다.

 

19. 멀티스레드와 스레드의 차이점

여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법을 말합니다. 메모리 공유로 시스템 자원 소모가 줄어들고 동시에 두가지 이상 작업이 가능하지만 서로 자원을 소모하다 충돌할 가능성이 있고 코딩이 복잡해져 버그가 생길 가능성이 있습니다.

 

20. 제네릭은 무엇인가?

제네릭은 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일시의 타입체크를 해주는 기능입니다. 즉 클래스 내부에서 사용할 데이터타입을 나중에 인스터스를 생성 할 때 확정하는 것을 제네릭이라고 합니다.

 

댓글