객체지향 프로그래밍에 대해 설명해주세요.
객체지향 프로그래밍이란 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.
주요한 키워드로는 클래스, 인스턴스, 추상화, 캡슐화, 상속, 다형성 등이 있습니다.
클래스는 객체를 만들기위한 설계도와 같은 역할을 하며, 객체는 클래스라는 설계도로 만들어져 실제 메모리에 할당되어 사용되는 개체를 의미합니다.
추상화란 객체에서 공통된 속성과 행위를 찾아 추출하고 타입을 정의하는 과정을 의미합니다.
캡슐화란 객체 상태가 외부로부터 숨겨진 상황에서 이 상태에 접근하려는 일련의 공개 메서드만 노출하는 기법입니다.
상속이란 부모 객체가되는 객체를 기반으로 자식 객체들을 만드는 기법입니다. (자식은 부모의 역할을 모두 수행할 수 있어야합니다.)
다형성이란 객체가 때에 따라 다르게 동작할 수 있게 해주거나 어떤 동작이 다른 방법으로 동작할 수 있을도록 하는 기법입니다. (메서드 오버로딩 혹은 메서드 오버라이딩으로 구현할 수 있습니다.)
(추가) SOLID 원칙
REST API란 무엇인가요?
일단 API란 서버와 클라이언트가 통신을 어떠한 방식으로 통신할지에 대한 약속(규칙)을 정의하는 것을 의미합니다.
REST API란 REST라는 소프트웨어 아키텍처 스타일을 따르는 API를 의미합니다. REST API는 행위, 자원, 표현의 세가지 요소로 구성됩니다.
REST란 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌으며, 대규모 고성능 통신을 안정적으로 지원할 수 있다는 장점이 있습니다. 또한 HTTP 프로토콜을 사용하기 때문에 별도의 인프라를 구축할 필요가 없고, REST API 메세지가 의도하는 바를 쉽게 파악할 수 있기 때문에, 구현과 수정 등이 쉽습니다.
GraphQL, SOAP 등이 비교 대상이 될 수 있습니다.
SQL Injection이란 무엇인가요?
SQL Injection이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL문을 주입하고 실행되게하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위입니다.
논리적 에러를 이용한 SQL Injection, Union 명령어를 이용한 SQL Injection 등이 있으며, 대응방안으로는 입력 값에 대한 검증을 하는 방법 혹은 웹 방화벽을 사용하는 방법 등이 있습니다.
(추가) 행위나 목적에 대한 설명도 추가되면 좋을 것 같음.
Java에서 '=='과 'equals()'의 차이는 무엇인가요?
'=='은 비교하고자하는 두 대상의 주소 값을 비교하고, Object에서 'equals()'는 두 대상의 주소 값을 비교하고, String에서 'equals()'는 String실제 값 자체를 비교합니다.
Primitive Type의 값들은 '=='으로 비교가 가능하지만, String Type의 값들은 '=='으로는 값 비교가 불가합니다.
따라서 String의 값 자체의 비교를 원할 경우에는 'equals()'메서드를 사용하여야 합니다.
(추가) Object Class의 Equals 함수는 주소값을 비교 한다.
MVC 패턴이란 무엇인가요?
MVC 패턴은 디자인 패턴 중에 하나입니다. Model, View, Controller의 약자이며, 하나의 프로젝트를 구성할 때 구성요소를 세가지의 역할로 구분한 패턴입니다.
MVC 패턴은 사용자가 Controller를 조작하면 Contoller는 Model을 통해 데이터를 가져오고, 가져온 데이터를 바탕으로 사용자에게 보여줄 View를 구성하여 전달하는 구조입니다.
MVC 패턴의 핵심은 각 구성요소를 독립시킴으로써 맡은 부분의 개발에만 집중할 수 있게 하여 개발의 효율성을 높일뿐만 아니라, 개발 완료 후에도 유지보수성과 확장성을 보장합니다.
Array와 LinkedList의 특징과 차이점은 무엇인가요?
Array는 중복을 허용하며 순서를 유지하고 인덱스로 원소를 관리하는 자료구조이고, LinkedList는 내부적으로 노드간의 연결이 있는 자료구조입니다. Array는 단순 검색에 용이하다는 특징이 있고, LinkedList는 삽입과 삭제가 용이하다는 특징을 가지고 있습니다.
RDB와 NoSQL의 특징과 차이점은 무엇인가요?
관계형 데이터베이스(RDB)는 사전에 엄격하게 정의된 DB Schema를 요구하는 Table 기반 데이터 구조를 가지며, 비관계형 데이터베이스(NoSQL)는 Table 형식이 아닌 비정형 데이터를 저장할 수 있는 구조를 가집니다. RDB는 엄격한 스키마로 인해 데이터 중복이 없기 때문에 Update가 많을 때 유리하고, NoSQL은 데이터 중복으로 인해 Update 시 모든 컬렉션에서 수정이 필요하기 때문에 Update가 적고 조회가 많을 때 유리하다.
POJO란 무엇인가요?
POJO는 Plain Old Java Object로 직역하면 "오래된 방식의 간단한 자바 오브젝트"라는 뜻입니다. 개념적인 뜻으로는 특정 기술에 종속되지 않는 순수한 자바 객체라고 할 수 있습니다. 예를 들어 특정 기술을 사용하기 위해 특정 프레임워크를 의존하게 된다면 그것은 POJO라고 할 수 없는 것입니다.
Transaction이란 무엇인가요?
트랜잭션은 은행 업무나 데이터베이스에서 더 이상 쪼개질 수 없는 최소의 작업단위를 뜻하며, 더 자세하게 데이터베이스에서 트랜잭션은 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 의미합니다.
트랜잭션은 원자성, 일관성, 독립성, 지속성, 4가지의 특징을 가지고 있으며, 철자 앞부분을 따 ACID라고 부르기도 합니다.
트랜잭션이 문제없이 완료되면 커밋을 통해 완료되었음을 알리고, 트랜잭션의 일부에서 문제가 발생해 비정상적으로 동작했을 경우에는 롤백을 통해 문제가 발생한 부분을 다시 수행하거나 트랜잭션 수행 이전의 상태로 되돌리는 롤백을 합니다.
(추가) Isolation Level에 대해서 정리해보기.
자바 애플리케이션이 실행되는 과정을 설명해주세요.
개발자가 .java 파일로 소스코드를 작성하면, 컴파일러가 JVM이 읽을 수 있는 .class 파일로 컴파일을 시킵니다. (IntelliJ와 같은 IDE에서는 저장과 동시에 컴파일이 이루어짐) 이를 IDE에서 실행시키면 JVM은 .class 파일을 읽어들여 애플리케이션을 컴퓨터에서 동작시킵니다.
Inner Join과 Outer Join을 비교해서 설명해주세요.
Inner Join은 기준 테이블과 대상 테이블의 교집합으로 가상의 테이블을 구성하여 데이터를 사용하는 방법을 의미하고, Outer Join은 합집합으로 가상의 테이블을 구성하여 데이터를 사용하는 방법을 의미합니다. Outer Join에는 Left, Right, Full Outer Join이 있습니다.
[Database] INNER JOIN과 OUTER JOIN의 차이
SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)
정규화란 무엇이고 어떤 장단점이 있나요?
데이터베이스에서 정규화란 데이터의 중복을 줄이고 무결성을 향상시키는 등 여러 목적을 달성하기 위해서 재디자인하는것을 의미합니다.
올바른 데이터만 얻을 수 있고, 불필요한 쿼리 제거로 성능 향상을 할 수 있다는 장점이 있습니다. 반면, 릴레이션 간의 JOIN 연산이 증거하여 응답시간이 늘어날 수 있다는 단점이 있습니다.