CS 정리

byteofprl·2021년 2월 13일
0

📂 Spring_framework

Spring이란 무엇인가요?

스프링은 프레임 워크이다.

  • 개발자들이 따라야 할 가이드라인을 가진다. 시스템의 통합성과 일관성을 높이는 대신 개발자의 자유가 제한된다.
  • 컴포넌트 재사용 가능
  • 개발자들을 위한 다양한 도구들이 지원된다.

Spring Boot 란?

스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용

  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버 설치 필요 없다.
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공

springboot 작동원리

springboot 작동원리

Q. Spring, Spring MVC, Spring Boot의 차이점에 대해 각각 설명해 주세요.

  • Spring MVC : 규모나 서비스가 어느 정도 있는 애플리케이션은 MVC로 만들어서 WAS로 배포하는게 유리

  • Spring boot : 내장 톰캣 사용이 가능하여 규모나 서비스가 크지 않은 프로젝트에 적합

Spring Framework의 생명 주기에 대해서 말해주세요.

Q. maven이란?

프로젝트 관리 도구로 가장 많이 사용되는 용도는 프로젝트에 필요한 라이브러리를 자동으로 관리해주는 빌드 도구

Q. IOC와 DI에 대해서 설명해주세요.

  • IOC (제어의 역전) : 제어의 역전으로 주도권이 스프링에 있다. = 스프링이 다양한 객체들을 읽어서 heap 메모리에 올려준다.

🔸 개발자가 직접 원하는 곳에서 new를 이용해 객체 주소를 관리했다면 IoC를 이용해서 스프링이 객체를 스캔하여 메모리에 올리기 때문에 이제는 객체를 개발자가 관리하는 것이 아니라 스프링이 관리해준다.

  • DI (의존성 주입) : 스프링이 관리하는 객체들을 어디서든지 가져다가 사용할 수 있게 하는것, 어디서든지 동일한 객체를 사용할 수 있으므로 싱글톤으로 관리가능

  • @Component : 클래스 메모리에 로딩

  • @Autowird : 로딩된 객체를 해당 변수에 넣기

Q. AOP

관점 지향 프로그래밍의 약자로 기존 OOP에서 기능별로 클래스를 분리하였음에도 불구하고 여전히 로그나 트랜잭션, 자원해제, 성능테스트 메서드처럼 공통적으로 반복되는 중복 코드가 발생한다는 단점이 생긴다.
이를 해결할 수 있도록 개발 코드에서는 비즈니스 로직에 집중하고 실행 시 비즈니스 로직의 앞과 두에서 원하는 지점에 해당 공콩 관심사를 수행할 수 있게 하면서 중복 코드를 줄일 수 있는 방식이 바로 이 방식

🔸 클래스는 OOP방식으로, 개발 코드(로그, 트랜잭션, 성능테스트)처럼 반복되는 코드는 AOP방식으로 해서 코드 중복을 줄이자

Q. VO, DTO, DAO에 대해서 각각 설명해 주세요.

  • VO : DTO와 목적이 같지만 차이점은 불변의 성격으로 getter의 기능만

  • DTO (Data Transfer Object) : 프로세스 간에 데이터 전달 객체, getter, setter 메소드만 포함

  • DAO (Data Access Object) : 데이터 접근 객체, CRUD 기능 담당

Q. Servlet이 무엇인가요?

서블릿 컨테이너 란?

자바코드로 웹을 할 수 있게 컨테이너로 모아놓은 것 ▶ 톰캣

Sevlet(서블릿)

자바를 사용하여 웹을 만들기 위해 필요한 기술로 클라이언트의 요청을 처리하고, 그 결과를 반환하는 자바 웹 프로그래밍 기술

client request(자바) ▶ 서블릿 컨테이너 ▶
최초요청 시 : 스레드 생성 ▶ 서블릿 객체 생성 ▶ response
재 요청 : 기존에 있는 스레드 재사용

URI 방식

  • 식별자를 통해 접근하는 방식
  • 특정한 파일을 요청할 수 없다.
  • 요청시에는 무조건 자바를 거친다. (무조건 제어권을 톰켓에게 넘긴다.)
    ex) http://naver.com/Picture/a

Q. Dispatcher-Servlet이란 무엇인가요?

Frontcontroller 패턴 : web.xml이 처리해야 할 일이 많기 때문에 특정 주소는 낚아채서 Frontcontroller가 관리하는 것
RequestDispatcher : 웹서버 내부에서 자원을 요청하다보면 톰캣이 새롭게 request/response 해야하는 경우가 생긴다. 그리하여 기존 request/response를 유지하기 위해 나온 것

🔸 DispatcherServlet = Frontcontroller 패턴 + RequestDispatcher

DispatcherServlet이 자동생성될 때 수 많은 객체가 생성(IoC)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들을 자동 등록

DispatcherServlet 목적

  • 컴포넌트 스캔과 주소분배 인데 주소를 분배하기 위해서는 먼저 IoC해서 모메모리에 객체들을 띄워야 한다.
  • src 모든 파일 All 스캔

컴포넌트 스캔 ▶ IoC 역할을 해준다 ▶ 필요한 것들을 메모리에 올려줌 (어노테이션으로 구분) ▶ 주소분배

Q. Container란 무엇인가요?

  • 인스턴스의 생명주기 관리, 생성된 인스턴스들에게 추가적인 기능 제공
  • 객체의 생성과 소멸을 컨트롤

스프링 컨테이너 종류

  • 빈 팩토리 (BeanFactory)
    빈을 생성하고 분배하는 책임을 지는 클래스
    빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화 하지 않는다 (Lasy loading)

  • ApplicationContext
    빈팩토리와 유사하지만 좀 더 많은 기능을 제공하는 것
    컨텍스트 초기화 시점에서 싱글톤 빈을 미리 로드한 후 애프릴케이션 기동 후에는 빈을 지연없이 얻을 수 있다. bean을 제외한 객체들은 바로 메모리에 로딩

Q. Bean 이란?

스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
메서드가 객체를 리턴할때 메서드에 @Bean 어노테이션 사용
초기에 메모리에 로드되지 않고 필요할 때 getBean()이라는 메소드를 통해서 호출하여 메모리에 로드 할 수있다. 지금은 getBean()을 사용하지 않고 IoC를 사용하여 DI로 사용한다. ApplicationContext와 다른 점은 Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드돼기 때문에 lasy-loading이 되는 점이다.

Q. Interceptor와 Filter의 차이점을 말해주세요.

Filter : DispatcherServlet의 앞단 정보를 처리
Interceptor : DispatcherServlet에서 controller로 가기전에 정보를 처리한다.

🔸 전역적으로 처리해야하는 로직은 필터로 클라이언트에서 들어오는 디테일한 처리(인증, 권한)에 대해서는 주로 인터셉터에 처리

Q. REST 서비스

Representational State Transfer 자원을 이름으로 구분하여 정보를 주고 받는 것으로 네트워크 상에서 클라이언트와 서버 사이의 통신 방법 중 하나

  • XML 파일로 된 웹 페이지를 읽어 원하는 정보를 수집하는 기능으로 해당 페이지의 URI만 알면 웹 브라우저로 읽어 정보를 얻을 수 있다.

Q. MyBatis란?

객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 보다 쉽게 도와주는 프레임워크

  • 개방자가 지정한 SQL 매핑을 지원하는 프레임워크

특징

  • SQL문이 코드로부터 완전히 분리
    - Mapper파일에 SQL코드를 입력해서 사용
  • 생산성 : 코드가 짧아진다
  • Spring과의 연동으로 자동화된 처리
  • 유지보수성 향상

Controller ▶ Service ▶ DAO ▶ MyBatis ▶ Database

Q. JPA란?

JPA (Java Persistence API)로 자바 프로그램을 할때 영구적으로 데이터를 저장하기 위해 필요한 인터페이스

  • JPA는 ORM 기술이다.
  • 반복적인 CRUD 작업을 생략
  • 영속성 context를 가지고 있다.
  • DB 테이블에 FK를 가지게되면 오브젝트 객체를 가지게 되는데 이러면 DB테이블과 불일치가 일어나는데 이를 ORM을 이용하면 해결 가능
  • OOP의 관점에서 모델링 가능
  • 방언 처리가 용이하여 Mirgation하기 좋고, 유지보수에 좋다. (= JPA가 처리 할 수 있는 DB 종류가 다양하다.)

Q. MVC에 대해서 설명해 주세요.

spring MVC는 MVC 패턴 기반의 웹 프레임워크

  • model : 애플리케이션 정보, 데이터 처리관리
  • view : 사용자 인터페이스(화면)
  • controller : model과 view 간 상호동작 조정, 사용자의 액션에 응답하는 컴포넌트

Spring MVC에서 HTTP 요청이 들어왔을 때의 흐름을 설명해 주세요.

Q. Spring security란?

Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 관한, 인가)를 담당하는 스프링 하위 프레임워크


OAuth란?

  • code를 부여 받게 되면 카카오 인증처리 완료를 의미
  • AccessToken을 부여받게 되면 권한 부여를 의미한다
    - 권한을 부여 받으면 클라이언트 서버는 자원서버에 접근하여 사용자의 대한 정보에 접근 할 수 있다.

📂 Web

Q. Servlet

Container가 이해할 수 있게 구성된 순수 자바 코드로 이루어짐

Q. Get 방식

  • 클라이언트 -> 서버 주소뒤에 이름과 값이 결합된 스트링 형태
  • 위와같은 문제로 보안성이 떨어짐
  • 길이에 제한이 있음
  • Post 방식보다 전송 속도가 빠름

Q. Post 방식

  • 일정크기 이상 보낼때
  • 인코딩 / 디코딩 작업
  • 속도가 Get 방식보다 느림
  • Get 방식보다 보안성이 높음
  • 쿼리스트링 데이터 뿐만 아니라 라디오버튼, 텍스트 박스 데이터도 전송 가능

Q. Get vs Post

GetPost
데이터 요청데이터 전달
데이터가 URL에 노출됨데이터가 노출되지 않음
길이제한이 있음길이 제한 없음

HTTP 프로톨콜은 연결 지향적인 성격이 아니기 때문에 새로운 페이지 요청 시 "새로운 접속"을 하기 때문에 특정 방문자가 머무르고 있는 동안 그 방문자의 상태를 지속 시키기위해 사용한다.

Q. Session

  • 관련 데이터를 server에 저장 -> 모든 정보를 서버에 저장하면 서버가 느려질 수 있는 단점
  • 웹브라우저 캐시에 저장되어 브라우저를 닫거나 서버 삭제 시 사라짐
  • 쿠키에 비해 보안성이 좋다.
  • 관련 데이터를 클라이언트에 텍스트 파일로 저장 -> 클라이언트 pc에 저장함
  • 다른 사용자로 부터 임의 변경이 가능하여 보안성이 낮다.

Q. TCP VS UDP

  • TCP (transmission control protocol)
  • UDP (user datagram protocol)
TCPUDP
연결형 서비스 제공비연결형 서비스 제공
높은 신뢰성 보장신회성이 낮음
연결 설정 - 3way handshaking 연결 해제 - 4way handshaking데이터 수신 여부 확인 X
데이터 흐름제어, 혼잡제어데이터 전송 순서가 바뀔수 있음
양방향성 서비스 제공

Q. 형상관리

정보화 프로젝트 및 유지보수의 효율적인 협업을 위한 버전관리
ex) cvs, svn, Git

Q. include

정적 include : jsp가 컴파일 되기 전에 include한 파일이 부모페이지에 삽입되어 컴파일

  • 삽입후 -> 컴파일

동적 include : 사용자가 부모페이지 호출 시, 실행되어질 시점에 include파일 삽입

  • 호출 되는 시점에서 삽입

Q. Library

  • 독립성을 가진 최소단위의 기능 (메서드 단위)
  • 재사용 가능한 최소 단위 기능 또는 기능들의 집합
  • 기능을 사용하기 위해 다은 기능이 필요하지 않음
  • 재사용 할 수있는 함수 제공 = 라이브러리

📂 java

Q. Java란?

네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향프로그래밍 언어

Q. Java 특징

  • JVM만 설치하면 컴퓨터의 운영체제에 상관업시 작동 - 운영체제에 독립적
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현
  • 캡슐화, 상속, 다형성
  • Garbage Collector 통한 자동적인 메모리 관리
  • 멀티쓰레드 지원

자료형

Q. static(정적)

클래스가 로딩될때, 메모리 공강을 할당하는데 처음 설정된 메모리 공간이 변하지 않음. 어디서나 속성과 메서드 공유 가능

Q. 지역변수 vs 전역변수

지역변수전역변수
해당 함수 내에서만 사용가능모든 함수에서 사용가능
함수를 벗어나면 자동 소멸프로그램 종료시 소멸

Q. Primary type

변수에 값 자체를 저장

  • 정수형 : byte, short, int, long
  • 실수형 : float, double
  • 문자형 : char
  • 논리형 : boolean

Q. Reference type

메모리상에 객체가 있는 위치(주소)를 저장

  • class, Interface, Array

Q. Wrapper class

primitive type 간단한 데이터를 객체로 만들어야 할 경우

  • int ▶ Integer

Q. char type과 string type으로 나뉘어져 있는 이유는 무엇인가요?

char

  • 기본 유형
    - 해당 변수안에 직접적으로 값을 가지고 있다
    - 해당 값이 있는 좌표를 가지지 않음
  • 한 문자 (글자수 제한)

String

  • 클래스타입의 변수
    - 해당 값이 위치한 좌표를 내용물로 가진다.
  • 0개 이상의 문자 (글자수 제한이 없다)

🔸 == 연산자를 사용해보면 char의 경우 값이 같다면 ==을 사용할 수 있지만 String의 경우 내용이 같더라도 서로 다른 좌표(주소)가 생성되기 때문에 ==으로 비교시 다른값으로 나온다. 그래서 string은 .equals()메소드로 내용물을 비교하여야 한다.

Q. 문자열을 리터럴(string = "abcd")로 할당하는 것과 객체(string = new String("abcd"))로 할당하는 방식의 차이가 무엇인가요?

객체 할당 방식은 heap영역에서 할당되고, 리터럴 방식을 String Constant Pool이라는 영역에 할당

equals()로 비교하면 같은 값이지만 == 연산자로 비교 시 주소가 달라 다른 값으로 나온다

JVM

JVM (Java Virtual Machine)은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)

  • 메소드 영역(Method Area)
  • 스레드 영역(Thread Area) ▶ 영역마다 하나의 JVM 스택 영역으로 존재
  • 힙 영역(Heap Area)

Q. JVM의 구조에 대해서 설명해 주세요.

메소드 영역 (Method Area)

  • static 변수, 전역변수, 코드에서 사용되는 Class정보
  • JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

힙 영역(Heap Area)

  • 객체오 배열이 생성되는 영역
  • GC에 의해 메모리가 관리됨

JVM Stack Area (Thread Area)

  • 지역변수, 함수(메서드)등이 할당되는 LIFO 방식
  • 배열의 경우 배열의 변수는 스택영역에 생성, 배열 데이터 자체는 Heap영역에 생성

Q. Object-Oriented Programming (객체 지향)

객체지향 프로그래밍 객체와 객체의 상호작용을 통해 프로그램이 동작

객체 지향 프로그래밍은 OOP(Object Oriented Programming)이라고도 한다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

객체지향 특징

  • 추상화
    불필요한 정보는 숨기고 필요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것
    (여러개의 클래스에서 공통적인 요소, 필수적인 요소를담은 추상클래스)

  • 캡슐화
    속성과 기능을 정의하는 멤버 변수와 메소드를 클래스라는 캡슐에 넣은 것이다. 즉, 관련된 기능(메소드)과 속성(변수)을 한 곳에 모으고 분류하기 때문에 재활용이 원활하다.
    목적 : 코드를 수정없이 재활용하는 것, 정보 은닉, setter와 getter로 접근

  • 상속
    부모 클래스의 속성과 기능을 그대로 이어 받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우, 상속받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것이다.
    상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스 정의 가능, 코드를 공통적으로 관리하여 코드 추가 및 변경이 용이

  • 다형성
    하나의 변수명, 함수명 등이 상황에 따라서 다른 의미로 해설될 수 있는 것이다. 상속을 통해 기능 확장 / 변경 할 수 있게 하는 것
    즉, 오버라이딩, 오버로딩이 가능

장점단점
코드재사용성이 높다처리 속도가 상대적으로 느림
코드의 변경 용이객체가 많으면 용량이 커질 수 있음
직관적인 코드분석
개발속도 향상설계 시 많은 노력과 시간 필요
상속을 통한 장점

Q. 객체지향 언어 vs 절차지향 언어

객체지향 언어

  • 객체가 중심이 되어 코드작성하여 객체에 기능을 정의하고 호출순서는 객체가 담당
  • 절차지향 언어, 유지보수 보안하며 객체라는 독립된 작은 단위로 모든 데이터와 절차 처리
    - ex) java, python

절차지향 언어

  • 절차 중심으로 작성하는 코드 방식으로 순차적인 처리를 중시하는 언어
  • 객체를 서로 절차적인 관계로 묶어 프로그램 작성
    - ex) c
객체지향 언어절자지향 언어
코드가 간단하여 프로그램 개발이 빠르다컴퓨터 적업 처리 방식과 유사
기존코드 재사용처리가 빠름
유지보수가 쉽다효율적인 일처리 가능
처리속도가 느려질수 있다프로그램 개발이 번거로움
코드가 많아 유지보수가 힘듦

Q. Object (객체)

객체는 OOP에서 데이터(변수), 데이터에 관련되는 동작(함수), 절차, 방법, 기능을 모두 포함하는 개념으로 모든 클래스의 최상위는 Object가 있다.

Q. 객체 생성

클래스로부터 "new"를 이용해서 객체를 생성
ex) Grandeur myCar1 = new Grandeur();

  • Grandeur 클래스로부터 myCar1이라는 객체 생성

Q. Class

멤버 변수(속성), 메서드(기능), 생성자등으로 구성으로 클래스도 하나의 데이터 타입(자료형)

Q. 생성자

클래스 이름과 동일한 메서드

목적

  • 인스턴스 생성시 필드에 초기값 부여
  • 초기화 명령 실행

특징

  • 반환형 x
  • 가장 먼저 호출되어 메모리에 객체가 올라감
  • 생성자에서 바로 값을 받을 수 있다. (매개변수)

Q. 멤버 변수

자료형 + 데이터형 + 변수이름
ex) public String color;

Q. Parameter(매개변수)

메서드를 호출할때 데이터를 전달 할 수 있다.

Q. this

현 객체를 가리키는 것 this.변수명 = 전역변수

  • 메소드에 있는 지역변수를 전역변수에 담을때 사용
  • 객체가 던져준 변수를 객체가 소멸될때 까지 사용하기 위함 지역변수 -> 전역변수

Q. super

상위클래스에 변수를 말함
ex) 지점클래스가 본사클래스를 상속받고 있는 경우
this.openYear = 2000; (현재 클래스 개업년도)
super.openYear = 1995; (상속받는 클래스 개업년도)

Q. final

변수

  • 변수가 Final로 선언되면 변수의 값 변경 X
    메소드
  • Final 메소드는 오버라이드 X
    클래스
  • 상속 X
    생성자
  • 생성자는 Final 될 수 없다.

Q. 추상화 vs 인스턴스

클래스 ▶ 객체 (인스턴스화) : 클래스로부터 새로운 객체를 생성하는 행위
객체, 객체 ▶ 클래스 (추상화) : 객체들을 추상화하여 그들의 공통적인 속성을 기술하는 것

Q. Interface

클래스와 달리 캑체 생성을 x, 클래스에서 구현해야 하는 작업명세서

  • 추상 메서드, 상수만을 멤버로 하며 메소드는 선언만 가능하며 정의 할 수 없음
  • Implements 키워드 사용
  • 자바는 단일 상속이 원칙이지만 인터페이스는 다중 상속 가능

Q. 본인 관점에서, 인터페이스는 주로 어떨 때 사용하나요?

  • 구성하는 요소들이 자주 바뀔때 쓰면 유용
  • 메소드 형태만 서로 공유하기 떄문에 재정의되는 상활일 때도 사용 적합
  • 협업, 다중 상속을 위해 사용

Q. 함수형 인터페이스란 무엇인가요?

1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.
Single Absttract Method(SAM)이라고 불리기도 함
목적

  • 람다식으로 만든 객체에 접근하기 위함

Q. abstract class (추상클래스)

클래스의 공통된 부분을 뽑아서 별도의 클래스로 만들어 놓고, 상속해서 사용

  • 멤버변수 사용
  • 생성자
  • extends 키워드 사용
  • abstract 메서드는 상속받은 클래스에서 반드시 구현
  • 일반 메서드도 가질 수 있다 (class의 특징도 가진다)

Q. Interface vs abstract class

공통점Interfaceabstract class
추상메서드를 가진다상수, 추상메서드만 가능클래스 속성으로 메서드, 추상메서드 모두 ok
객체 생성이 불가하며 자료형으로 사용됨추상 메서드 선언만 가능선언도, 구현도 모두 ok
사용하기 위해서는 하위클래스에서 확장 구현해야함다중상속 가능단일상속만 가능

Q. 클래스, 객체, 인스턴스 차이에 대해서 설명

클래스

  • 객체를 만들어 내기 위한 설계도, 연관있는 변수와 메서드 집합

객체

  • 구현할 대상, 클래스에 선언된 모양 그대로 실체 (클래스 인스턴스)

인스턴스

  • 설계도 바탕을 구현된 실체, 실체화된 인스턴스는 메모리에 할당

Q. Thread(쓰레드)

프로세스 내에서 동시에 실행되는 독립적인 실행 단위

장점단점
빠른 프로세스 생성교착상태에 빠질 수 있다
적은 메모리 사용
쉬운 정보 공유

Q. Process(프로세스)

운영체제에서 실행중인 하나의 프로그램

  • process > thread
  • 여러개의 스레드 = 하나의 프로세스

Q. Overloading

같은 이름의 메소드를 여러개 정의하는 것으로 데이터 타입 or 매개변수가 달라야한다.

  • 같은 이름으로 메소드를 사용하지만 다른 용도로 사용되며, 그 결과물도 다르게 이용하기 위함

Q. Overriding

상속에서 나온 개념으로 상위클래스의 메소드를 하위클래스에서 재정의

Q. 접근제한자

  • public : 제한이 없음(같은 프로젝트 내에 어디서든 사용가능)
  • protected : 같은 pakage 내, 다른 pakage에서 상속받아 하위에서 접근 가능
  • default : 같은 pakage에서만 접근 가능
  • private : 같은 class내에서만 접근 가능

Q. Garbage collector

시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭(연결이 끊긴 배열)을 찾아 자동으로 다시 사용가능한 자원으로 회수

  • 사용하지 않는 메모리를 자동으로 사용 가능한 자원으로 회수

Q. equals와 ==의 차이는 무엇인가요?

equals() 메소드는 대상의 내용 자체를 비교
== 연산자는 대상의 주소값을 비교

a (주소: 500, 값: "aaa")
b (주소: 600, 값: "aaa")

a.equals(b) : true
a == b : false

Q. hashCode란 무엇인가요?

자바에서 동일한 이름의 객체가 여러개 생성될 수 있는데 이 객체들은 이름만 같을 뿐 서로 다른 상태를 가진 객체들이 되는 것이다.
이런 객체를 구별하기 위해, 고유한 정수값으로 출력시켜주는 메소드가 hashCode()

Q. Java는 Call By Value일까요, Call By Reference 일까요?

  • Call by Value : 값에 대한 호출
  • Call by Reference : 참조에 대한 호출

Q. Java의 Collection에 대해서 설명해 주세요.

List

  • 삽입 순서 OK
  • 중복 OK
  • ex) ArrayList, LinkedList
    - ArrayList 가변형 배열 메모리 위치가 쭉 이어짐 -> 검색에 빠름(조회에 유리)
    - Linked List 배열인데 모메로 위치가 뒤죽박죽 -> 삭제 시 빠름(삽입, 삭제 유리)

Set

  • 중복 X
  • 인덱스를 사용하지 않으므로 저장순서가 보장 되지 않음-> 순서 X

Map

  • key, value
  • key 중복 X, value 중복 OK

Q. Array와 ArrayList의 차이점은 무엇인가요?

Array는 길이가 정해져있는 배열
ArrayList 가변형 배열 메모리 위치가 쭉 이어짐 -> 검색에 빠름(조회에 유리)
Linked List 배열인데 모메로 위치가 뒤죽박죽 -> 삭제 시 빠름(삽입, 삭제 유리)

Q. Lambda(람다)란?

람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어

람다의 특징

  • 이름을 가질 필요가 없다. (익명 함수)

람다의 장단점

장점단점
코드의 간결성호출이 까다롭다
지연연산 수행람다 사용시 단순 for, while 성능이 떨어짐
병렬처리 가능(멀티쓰레드 사용)불필요하게 사용시 가독성이 떨이짐

Q. Java Generic에 대해서 설명해 주세요.

Genric은 일반적인 이라는 뜻을 가진 단어로 클래스 내웁에서 사용할 데이터 타입을 외부에서 지정하는 방법

목적

  • 타입 에러 사전 방지
  • 타입 변환 제거(캐스팅)

프로그래밍의 Generic

  • 일반적인 코드를 작성하고, 이 코드를 다양한 타입의 객체에 대하여 재사용
  • 클래스에서 사용할 타입을 클래스 외부에서 설정하는 타입
  • Java 1.5부터 추가

Q. iterator와 iterable 차이는 무엇인가요?

iterator

  • 컬렉션 프레임워크에서 저장된 요소를 읽어오는 방법을 표준화하기 위한 역할(인터페이스)
  • List, Set
  • 주로 읽기 전용으로 사용

iterable

  • 순회할 수 있는 컬렉션
  • iterable 인터페이스를 implement하면 객체는 foreach문을 사용할 수 있음

Q. foreach를 사용할 수 있는 자료구조는 어떤 인터페이스를 상속받고 있나요?

Iterable 인터페이스를 구현

Q. synchronized 키워드에 대해 설명해 주세요.

동기화란 하나의 자원(데이터)에 대해서 여러 스레드가 사용하려고 할 때 한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것

Q. DDL, DML, DCL에 대해 설명

  • DDL (Data Define Language) 테이블/뷰/인덱스 정의/변경/제거 할때 사용
    - 테이블 생성, 테이블 내용 변경, 테이블 삭제
    • ex) CREATE, ALTER, DROP
  • DML (Data Manipulation Language) 질의를 통해서 저장된 데이터 실질적으로 관리
    - 테이블 안의 데이터 하나한를 추가하고 삭제, 수정
    • ex) INSERT, DELETE, UPDATE
  • DCL (Data Control Language) 보안/무결성/회복/병행 제어등을 정의
    - ex) COMMIT, ROLLBACK, GRANT, REVOKE

Q. json

JSON은 경량의 DATA-교환방식
Javascript에서 객체를 만들 때 사용하는 표현식을 의미

  • JSON 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 적어서, 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용
  • 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링할 수 있는 라이브러리를 제공한다.

XML

  • HTML과 매우 비슷한 문자 기반의 마크업 언어

Q. 리플렉션(Reflection)이란 무엇인가요?

객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법으로 스프링 컨테이너에서 BeanFactory의 경우 객체가 호출될때 인스턴스를 생성하게 되는데 이때 필요한 기술이다.

Q. 직렬화(Serialization)과 역직렬화(Deserialization)에 대해서 설명해 주세요.

직렬화

  • 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미(객체 ▶ 전송가능 형태)
  • 객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다.
  • 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용
  • implements Serializable

역직렬화

  • 역으로 직렬화하여 다시 객체의 형태로 만드는 것을 의미(전송가능 형태 ▶ 객체)
  • 저장된 파일을 읽거나 전송된 Stream 데이터를 읽어 원래 객체의 형태로 복원

0개의 댓글

관련 채용 정보