💡 객체 지향 프로그래밍이란 무엇인가?
절차지향 프로그래밍은 오로지 컴퓨터 관점에서의 프로그래밍 패러다임이라면 객체지향은 인간이 구분할 수 있는 요소를 객체로 표현한 인간 중심적 프로그래밍 패러다임이다. 객체는 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합이 정의되면 객체를 선언할 수 있다. 많은 객체 지향 언어에서 객체는 클래스로 그룹화 된다. 생성된 클래스로 객체의 특정 예를 생성하는데 이를 인스턴스라고 부른다. 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어난다. 객체 지향 프로그래밍은 4가지 특징을 가진다.
- 추상화 : 클래스를 구현함에 있어 필요한 부분만 구현할 수 있다.
- 캡슐화 : 어떤 클래스를 이용함에 있어 내용(내부적인 데이터 흐름)은 알 필요 없이 사용해도 된다.
- 은닉화 : 클래스의 내용을 함부로 고치지 못하도록 하여 무결성을 보장한다.
- 상속 : 어떤 클래스(부모 클래스)의 속성과 메소드를 다른 클래스(자식 클래스)가 이어 받아 사용할 수 있다.
- 다형성 : 동일한 요청에 다른 방식으로 처리할 수 있도록 한다.
💡 OOP란?
OOP란 Object(객체) Oriented(지향) Programming(프로그래밍)의 약어로 객체지향형 프로그래밍을 의미한다.
모든 데이터를 객체로 취급하여 프로그램에 반영한 것이며 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.
- 코드의 재사용이 가능한 장점
- 오류 발생 가능성이 적고 안정성이 높음
- 변경용이
- 직관적인 코드분석
- 개발속도향상
- 상속을 통한 장점 극대화
💡 자바의 특징은?
자바는 네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍언어이다.
[장점]
- [이식성이 좋다] : 자바 가상 머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다. 즉, 운영체계에 독립적이라는 것이다. 구조 중립적이라고도 표현하며, 구조 중립적인 자바는 높은 이식성을 제공한다.
- [객체 지향 언어] : 기본 자료형을 제외하고는 모든 요소들이 객체로 표현되면 객체 지향 개념의 특징인 캡슐화, 상속, 다형성 등이 잘 적용된 객체지향언어이다.
- 보안성이 뛰어나다.
- [메모리를 스스로 관리] : 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해준다.
- 멀티 쓰레드(Muti-Thread)를 지원한다.
- 미리 설치되지 않은 프로그램이 서버로부터 동적으로 다운로드되어 웹 브라우저에서 실행할 수 있도록 동적인 성능 확장을 제공한다.
- 분산 환경에 적합하여 네트워크 수행 능력이 뛰어나다.
[단점]
- 자바는 실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느림
- 바이트 코드를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 Hotspot과 같은 신기술 도입으로 JVM의 기능이 향상됨으로써 속도문제가 상당히 개선되었다.
- 자바는 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함
- 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편
💡 UML이란?
UML은 Unified Modeling Language의 약어로 ‘객체모델링 언어’ 또는 ‘통합모델링 언어’를 뜻한다.
시스템 설계, 요구분석, 시스템 구현등의 과정에서 사용되는 모델링 언어로 표기법의 표준화를 목적으로 한 것이다.
[주요 다이어그램]
- 클래스 다이어그램 : 가장 많이 이용되는 다이어그램. 클래스의 내부구조와 클래스 사이의 관계를 모델링 할 때 사용.
- 객체 다이어그램 : 클래스 다이어그램을 보충하기 위하여 사용.
- 컴포넌트 다이어그램 : 소프트웨어 컴포넌트 사이의 정렬과 의존을 나타냄.
💡 스레드(Thread) 정의
프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함.
장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.
💡 스레드(Thread) 특징
- 어플리케이션의 성능을 향상시킬수 있고, 구현이 쉽다. 즉 작은 투자로 큰 효과를 기대.
- 스레드를 활용한 대표적인 예) 웹 브라우저
- 스레드를 쓰지 않고 프로세스나 다른 방법을 통하여 비슷하게 구현 할 수 있다.
반면 대부분의 자원을 많이 소모하여 구현이 복잡해지고 범용성이 떨어지는 등의 문제점이 있다.
스레드를 사용함으로써 이 문제들을 해결할 수 있다.
스레드는 각자의 스택 메모리영역을 가지고 있다. 프로세스와 달리 스레드는 동일한 프로세스내의 다른 스레드들과 전역메모리를 공유한다.
이에 반해 프로세스는 자기 자신의 메모리영역을 가진다.
💡 스레드(Thread) 장단점
[장점]
- 빠른 프로세스 생성
- 적은 메모리 사용
- 쉬운 정보 공유
[단점]
- 교착상태에 빠질 수 있다.
스레드는 작업 디렉토리, 파일 지시자들, 대부분의 전역변수와 데이터, UID와 GID 같은 자원들을 서로간에 공유하고 있기 때문에 자원을 프로세스 복사(copy-on-write)방식으로 자식 프로세스에게 복사하여 사용하는 프로세스(fork) 방식에 비해 더 빠른 수행능력을 보여주고 있다.
하지만 다중스레드 방식의 프로그래밍에서는 매우 정교한 실패나 의도하지 않은 변수의 공유로 인해 야기되는 실패가 발생할 가능성이 매우 높다. 그 대표적인 예)교착상태
교착상태 : 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정시간을 기다리고 있는 상태.
망에서는 사용 가능한 버퍼가 없어 일단의 노드들이 패킷을 전송할 수 없는 상태이다. 데이터 통신망에서 송신기 및 수신기간에 전송할 정보는 있지만 송수신에 필요한 자원이 서러 맞물려 있어 송수신이 이루어질수 없는 현상. 교착상태에는 직접, 간접 및 재조립 교착상태가 있다.
💡 스레드와 프로세스의 차이점은?
운영체제에서 실행중인 하나의 프로그램을 프로세스(Process)라고 한다. 여러 분야에서 ‘과정’ 또는 ‘처리’라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 ‘실행중인 프로그램’이라는 뜻으로 쓰인다. 이 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.
💡 REST API란 무엇인가?
REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다. 웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI를 통해서 자원을 명시하고 POST, GET, PUT, PATCH, DELETE등의 Method를 통해서 해당 자원의 행위를 지정한다. 코드의 재사용성을 높일 수 있으며 프론트엔드와 백엔드의 완전한 분업이 가능해지는 등 장점을 가진다.
💡TDD란 무엇이며 어떠한 장점이 있는가?
테스트 주도 개발(Test Driven Development), 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것을 의미하며 모듈화가 자연스럽게 잘 이루어지면서 개발이 진행된다. 테스트 커버리지가 높아져 리팩토링과 유지보수가 쉬워진다.
💡 MVC 패턴이란 무엇인가?
모델(Model), 뷰(View), 컨트롤러(Controller)가 분리된 형태의 아키텍처이다. 세가지가 결합된 형태에서는 어플리케이션의 확장이 어렵다. 모델은 데이터 처리, 뷰는 사용자 인터페이스 처리, 컨트롤러는 비즈니스 로직을 처리하는 등 각각의 요소가 하나의 역할만 담당한다.
💡 MVC1과 MVC2의 차이점
MVC1
MVC2
MVC2는 요청의 결과를 보여주는 뷰만 JSP가 담당하고, 컨트롤러의 역할은 서블릿이 담당한다.
💡 Spring MVC란?
- MVC는 Model, View, Controller의 약자이며, 각 레이어간 기능을 구분하는데 중점을 둔 디자인 패턴입니다.
- Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분 (DAO, DTO, Service 등)
- View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간 (html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.)
- Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할
Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.
💡 JVM이란?
자바 프로그램은 자바 컴파일러에 의해 바이트 코드로 번역된다. 이 번역된 바이트 코드는 인터프리터에 의해 해석되고 실행된다. 여기서 자바 바이트 코드를 기계어로 사용하는 컴퓨터를 자바 가상기계라고 한다.
즉, 자바의 바이트 코드를 해석하여 실행하는 해석기가 설치된 컴퓨터는 모두 자바 가상 기계가 될 수 있음.
💡 SI란 무엇인가?
SI란 System Integration의 약자로 시스템 통합을 말한다.
기업이 필요로 하는 정보 시스템에 관한 기획과 개발, 나아가 운영에 이르기까지 모든 서비스를 제공하는 것이다. 시스템 통합은 기업 내의 각종 어플리케이션이나 전산 자원들을 통합‧연계하여 전체를 하나의 시스템처럼 유기적으로 조정할 수 있도록 하기 위함이다.
💡 객체에 대해 설명 해보시오.
객체(Object)는 객체 지향 프로그래밍(OOP)이나 설계에서 데이터(실체)와 그 데이터에 관련 되는 동작.
즉 절차, 방법, 기능을 모두 포함한 개념이다. 기차역에서 승차권을 발매하는 경우를 예로 들면 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이며, 실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다. 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 같은 등급에 속하는 객체는 그 등급의 인스턴스(instance)라고 한다.
💡 클래스 파일에 대해 설명해보시오.
자바(JAVA)는 인터프리터 언어와 컴파일 언어의 특성을 모두 가지고 있는 언어이다.
자바 언어를 컴파일 했을 때 나오는 결과물이 클래스 파일(class file)이다. 클래스 파일은 온전한 실행 파일이 아니기 때에 자바 버추얼머신(JVM)이 한번 더 컴파일을 했을 때에야 제대로 된 실행을 할 수 있다. 즉, 클래스 파일은 소스파일과 실행파일의 중간단계로 볼 수 있다. 두 번 컴파일을 해야하기 때문에 속도가 느리다는 단점이 있지만, JVM만 있다면 플랫폼을 가리지 않고 실행할 수 있다는 장점을 가지고 있다.
💡 인터넷과 인트라넷의 차이점은?
인터넷(internet)
전 세계를 연결하는 거대한 컴퓨터 통신망을 말한다. 알파넷(ARPANET)에서시작되어 현재 세계 최대 규모의 통신망으로 발전하였다. 통신량이 급속도로 증가하고 있으며 정보의 기반으로 자리잡아 다양한 서비스와 정보를 지원한다. 정보 검색, 전자우편, 뉴스,게임 등 새로운 서비스가 차례로 개발되어 이용이 가능해지며 사용자의 편의를 도모하고 있다.
인트라넷(intranet)
인터넷을 이용하여 일정 지역 내에서 정보를 교환하거나 제공하는 시스템을 말한다. 인터넷망 접속보다는 기업 내부의 네트워크에 기술을 이식하여 사용하기 때문에 별도의 통신망을 구축하지 않아도 어디에서나 조직의 정보시스템을 확인 할 수 있다. 서로 다른 속성을 가진 정보시스템이라도 통합이 용이하며 적은 비용으로 큰 성과를 얻을 수있다. 기술표준을 이용하기 때문에 폭넓은 적용이 가능하지만 정보 보안에 대한 문제가 단점으로 제기된다.
💡 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점은?
오버로딩 (Overloading)
- 같은 이름의 메소드를 여러 개 정의하는 것.
- 단, 매개변수의 타입이 다르거나 개수가 달라야 한다.
- return type과 접근 제어자는 영향을 주지 않는다.
오버라이딩 (Overriding)
- 상속에서 나온 개념.
- 상위 클래스의 메소드를 하위 클래스에서 재정의.
💡 JDBC란?
JDBC(Java Data Base Connection)의 약자로 Java Language에서 데이터 베이스에 접근할 수 있는 프로그래밍을 의미한다.
💡 JDBC 코딩 단계는?
DriverLoading → Connection → SQL작성 → Statement → ResultSet → Data get → close
드라이버 등록하고 DBMS를 연결한 후 statement를 생성 하고 sql을 전송합니다. 결과를 받고 사용한 객체를 역순으로 닫아줍니다.
💡 JDBC에서 Transaction 관리는 어떻게 하나요?
conn.setAutoCommit(false); : 메서드를 통해서 각각을 따로 commit/rollback 할 수 있게 설정
- conn.commit(); : 정상실행
- conn.rollback(); : exception 발생
💡 JDBC에서 Transaction을 처리할 때, setAutoCommit란?
Transaction이란 일련의 작업 단위이다.
프로그램 내에서 쿼리문을 몇 번 실행하던지, 그안에 몇 개의 쿼리나 몇 개의 프로시져가 있더라도 Commit이나 Rollback을 만날 때까지하나의 작업 단위가 된다. 이렇게 보면 Transaction은 Select를 제외하고, Insert,Update, Delete문을 실행하고 Commit이나 Rollback을 할 때까지의 작업 단위로 볼 수있다.
💡 setAutoCommit(true);인 경우와 setAutoCommit(false);인 경우의 차이점은?
setAutoCommit(true);인 경우
- 쿼리문을 실행할 때마다 Commit처리가 된다.
- 비정상적으로 종료되기 전까지는 실행한 쿼리문이 모두 반영되어 있다는 뜻이다.
setAutoCommit(false);인 경우
- 코드상에서 직접 Commit이나 Rollback을 해주어야만 실행한쿼리문이 반영된다.
- Rollback 실행 후에 추가적으로 Commit을 할 필요는 없다.
💡 statement와 preparestatement의 차이점은?
동적으로 쿼리문이 생성된다면, statement를 사용.
쿼리문이 변하지 않는다면, preparedStatement를 사용.
💡 Servlet과 JSP의 차이점은?
Servlet
- container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(html in java)
JSP
- html기반에 자바코드를 블록화하여 삽입한 것(java in html)
💡 GET과 POST의 차이점은?
: GET은 주로 웹 브라우저가 웹서버에 데이터를 요청할 때 사용되고,
POST는 웹브라우저가 웹 서버에 데이터를 전달하기 위해서 사용된다.
GET
- 웹브라우저에서 웹서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
- 주소 뒤에 "이름"과 "값"이 결합된 스트링형태로 전달.
- 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안을 요하는 전송에는 부적합하다.
- 길이에 제한이 있다.(전송 스트링이 너무 길면, 255글자 이상은 전송이 안된다.)
- post방식보다 상대적으로 속도가 빠르다.
- HTML FORM에서 method="get/post"를 지정하지 않으면 기본으로 GET방식으로 넘어간
다.
POST
- 일정 크기 이상의 데이터를 보내야 할때 사용한다.(255글자 이상의 긴 정보를 보낼 때 사
용한다.) - 서버로 보내기 전에 인코딩(일종의 암호화)하고, 전송 후 서버에서는 다시 디코딩(원상복
귀) 작업을 한다. - 속도가 GET 방식보다 느리고, 주소창에 보이지 않으니 좀 더 안전하다.
- 쿼리스트링(문자열) 말고, "라디오 버튼", "텍스트 박스", "텍스트 에어리어"같은 객체들의
값도 보낼 수 있다.
💡 Session과 Cookie의 차이점과 사용용도?
Session
- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
- Cookie와는 다르게 개인 아이디와 비밀번호와 같은 웹사이트의 데이터는 Client가 아닌 Server에 저장되거나 웹브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
Cookie
- 사용자 정보를 유지할 수 없다는 HTTP고유의 한계를 극복할 수 있는 방법으로 인터넷 웹사이트의 방문 기록을 남겨 사용자와 웹사이트 사이를 매개해 주는 정보이다.
- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
사용이유
- 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다.
- 이에 따라 HTTP프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
💡 String과 StringBuffer의 차이점은?
String text = "Java";
text = text + " String";
System.out.println(text); // Java String
JDK 5 이전에는 String 문자열을 더하면 새로운 String 객체가 생성되고, 기존 객체는 쓰레기가 되어 나중에 GC(Garbage Collection)의 대상이 되었다. 이것이 반복되면 쓰레기가 계속 생성될 것이고 성능적인 문제점을 야기한다.
String
- String은 불변(Immutable)의 속성을 갖는다는 점이다.
- String 객체는 한 번 값이 할당되면 그 공간은 변하지 않는다.
StringBuffer
- 문자열을 사용할 때, 문자열을 실행시간에 변경할 수 있다.
- 가변적인 길이를 가지므로 객체를 생성하는 시점에서 미리 그 크기나 값을 지정할 수 있다.
- 실행시간에 버퍼의 크기를 바꾸는 기능도 제공한다.
📌 할당된 공간이 변하지 않는 특성을 불변(Immutable), 할당된 공간이 변하는 특성을 가변(mutable)라고 한다.
📌 String 클래스의 단점을 보완하기 위해 나온 클래스가 바로 StringBuffer와 StringBuilder다.
두 클래스에서 제공하는 메소드는 동일하다. StringBuffer와 StringBuilder는 문자열을 더해도 새로운 객체를 생성하지 않는다. 두 클래스는 append() 메소드를 가장 많이 사용하며, 매개 변수로 모든 기본 자료형과 참조 자료형을 포함한다.
💡 서블릿의 라이프 사이클에 대해 설명하세요.
- 서버를 실행시키는 순간 서블릿의 생성자가 호출된다.
- 생성자를 호출해서 객체가 생성되면 초기화 작업을 한다.
(init() 메소드가 최초 한번만 자동적으로 호출된다.) - 초기화 작업 후에는 Service메소드가 호출이 된다.
(req, res를 통해 data get, logic 구현등의 작업이 일어난다.
→ Service메소드는 클라이언트가 요청할 때마다 호출이 된다.) - 마지막으로 서버가 종료되는 시점에 destroy()메소드가 호출된다.
(혹은 서버 재시작 시에 자원 반납을 위해서 호출된다.)
💡 XML 이란?
XML(extensible markup language)이란 구조화된 문서를 웹상에서 구현할 수 있는 인터넷 프로그래밍 언어를 말한다.
문서의 구조적인 정보를 갖고 있는 XML 문서는 웹상에서 검색의 용이함과 체계적이고 일관적인 접근, 재가공의 용이함 때문에 HTML과 인터넷 표준 문서 포맷이 되었다.
- HTML과 매우 비슷한 문자 기반의 마크업 언어이다.
- 사람과 기계가 동시에 읽기 편한 구조로되어있다.
- HTML처럼 데이터를 보여주는 목적이 아닌 데이터를 저장하고 전달하는 목적으로 만들어졌다.
- XML 태그는 HTML 태그 처럼 미리 정의 되어 있지 않고, 사용자가 직접 정의할 수 있다.
💡 JSON이란?
- 자바 스크립트의 객체를 만드는 표현식으로 key,value로 이루어져 있다.
- 경량의 data를 교환하는 방식
- XML 대체해서 데이터 전송 등에 많이 쓰인다.
💡 XML과 JSON의 공통점과 차이점
공통점
- 데이터를 저장하고 전달하기 위해 고안되었다
- 기계 뿐아니라 사람도 쉽게 읽을 수 있다.
- 계층적인 데이터 구조를 가진다.
- 다양한 프로그래밍 언어에 의해 파싱될 수 있다.
- XMLHttpRequest 객체를 이용하여 서버로부터 데이터를 전송받을 수 있다.
차이점
💡 Interface란?
- 일종의 추상클래스이다.
- 오직 추상메소드와 상수만을 멤버로 가진다.
- Implements 키워드 사용한다.
- 상속의 관계가 없는 클래스간에 서로 공통되는 로직을 구현하여 쓸 수 있도록함.
- Extends는 하나의 클래스만 상속가능하나 인터페이스는 다중상속 가능하다.
💡 Abstract 란?
- 추상메소드를 하나 이상 가진 클래스.
- 자신의 생성자로 객체 생성 불가능.
- 하위 클래스를 참조하여 상위 클래스의 객체를 생성.
- 하위 클래스를 제어하기 위해 사용.
💡 Interface vs. Abstract Class 용도는?
공통점
- new로 인스턴스 생성이 안됨.
- 프로토타입만 있는 메소드를 가짐.
- 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.
차이점
- 사용하는 키워드가 다르다.
- Abstract는 일반 메소드를 사용할 수 있지만 interface는 메소드 선언만 가능하다.
- Interface는 다중상속이 가능하다.
💡 Reflection이란?
클래스의 이름으로부터 클래스의 정보를 취득하고 그 인스턴스를 생성하는 방법.
jdbc드라이버 로드 방법도 리플렉션 패키지를 사용한 방법임. 그 외 Struts의 다이나믹 액션폼, 스프링에서 쓰임.
💡 Static의 의미는?
: 클래스가 로딩될 때 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미
- 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재.
- 객체와 무관한 키워드!
📌 static 멤버변수의 메모리는 한 번 만들어지므로 전체 객체에서 공유 할 수 있음.
💡 Heap이란?
: 실행되는 동안 동적으로 할당 되는 메모리 영역.
- 객체나 배열 new 키워드로 할당된 객체들이 저장된다.
- 모든 객체들이 저장되는 공간이다. (인스턴스와 배열)
- JVM의 모든 스레드들이 공유하며, JVM이 시작될 때 생성된다.
💡 Stack 이란?
: 메서드가 호출될 때마다, 스택 프레임(stack frame)이라고 불리는 새로운 데이터 영역이 생성된다.
- 스택 프레임이 모여 자바 스택(java stack)을 생성한다.
- 스택의 최상단에 존재하는 스택 프레임은 활성화된 스택 프레임(active stack frame)이라고 부른다.
📌 heap & stack 이해를 돕기 위한 링크첨부
💡 Spring Framework란?
스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크 입니다.
동적인 웹 사이트 개발하기 위한 여러 가지 서비스를 제공해줍니다.
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술.
- POJO(Plain Old Java Object) : 오래된 방식의 자바 오브젝트의 줄임말
- 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬움
- 기존 라이브러리의 지원이 용이
- 제어의 반전(IoC)이라는 기술을 통해 어플리케이션의 느슨한 결합을 도모
- 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너가 대신 관리해주는 것
- 인스턴스 생성의 제어를 시블릿과 같은 bean을 관리해주는 컨테이너가 관리
- 의존성 주입(DI, Dependency Injection)을 지원
- 설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요없음
- 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)을 지원
- 트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리.
💡 Call by reference, Call by value
값에 의한 호출 (Call by value)
- 인자로 받은 값을 복사하여 처리를 한다.
- 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존된다.
- 단점 : 직접 참조를 하기 때문에 메모리가 사용량이 늘어난다.
참조에 의한 호출(Call by reference)
- 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.
- 장점 : 복사하지 않고 직접 참조를 하므로 빠르다.
- 단점 : 직접 참조를 하기 때문에 원래 값이 영향을 받는다.
💡 PK, FK, ER 모델이란?
Primary Key
- 테이블에서 각 Row를 유일하게 구분하는 Column Key
Foreign Key
- 하나의 테이블에 있는 Column으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary Key Column의 값을 반드시 참조하여 표현해야 하는 Column
Field
- Table에서 Row와 Column이 교차하는 데이터
💡 참조무결성이란?
관련된 테이블의 레코드 간의 관계를 유효하게 하는 규칙으로
사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아준다.
참조 무결성을 설정할 수 있는 조건은 기본 테이블에서 일치하는 필드가 기본 키이거나 고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 한다.
💡 RDBMS란?
- 모든 데이터를 2차원 테이블로 표현.
- 테이블은 row(record, tuple)과 column(field, item)으로 이루어진 기본 데이터 저장 단위.
- 상호관련성을 가진 테이블(table)의 집합.
- 만들거나 이용하기도 비교적 쉽지만, 무엇보다도 확장이 용이하다는 장점을 가짐.
- 데이터베이스의 설계도를 ER(Entity Relationship) 모델.
- ER모델에 따라, 데이터베이스가 만들어지며, 데이터베이스는 하나 이상의 테이블로 구성됨. ER모델에서 엔티티를 기반으로 테이블이 만들어짐.
- SQL(Structured Query Language)은 오라클 데이터베이스와 통신하기 위한 언어.
💡 DB에서의 Commit와 Rollback 이란?
Commit : 수행 쿼리문을 확정
- 쿼리문에서 Update, Delete, Insert를 수행했을 때, 그 쿼리문 수행결과에 대해서 확정을 짓는다는 것이다.
- Commit하기 전까지는 실제로 적용이 되진 않는다.
Rollback : 사용자가 Update, Delete, Insert 등을 실수로 수행했을 때, 데이터를 복원시킬 경우에 사용한다.
- Commit 하기 전에 수행함으로써 수행 쿼리문에 대해서 원상복귀 시킴
- 테이블에 데이터가 1개 있고 추가로 사용자가 테이블에 데이터를 2개 insert했다고 한다면, 이 때 Commit를 하면 해당 테이블에 3개 데이터가 확정이 되고 Commit 전에 Rollback를 하게 되면 3개의 데이터가 아닌 1개의 데이터가 그대로 보인다는 것이다.
💡 DBMS에 대해 설명해보시오.
- Database Management System의 약자로, 데이터베이스 관리시스템이라고도 한다.
- 다수의 컴퓨터 사용자들이 컴퓨터에 수록된 수많은 자료들을 쉽고 빠르게 추가,수정,삭제할 수 있도록 해주는 소프트웨어이다.
- 목적
: 데이터베이스 내의 정보를 검색하거나 데이터베이스에 정보를 저장하기 편리하고 효율적인 환경을 제공하는 것 - 기능 (세 가지)
- 구성기능
- 데이터베이스에 저장될 자료의 구조와 응용 프로그램이 그것을 이용하는 방식을 정의하는 것
- 레코드 구조의 정의, 데이터 모형의 정의, 물리적 구조의 정의를 포함 - 조작기능
- 사용자의 도구에 따라 데이터베이스에 저장된 자료를 검색,갱신,삽입,삭제할 수 있도록 하는 기능 - 제어기능
- 데이터베이스의 내용이 일관성을 유지하고 중복되지 않도록 하며, 허가되지 않은 접근을 제한하여 자료를 보호하는 기능
- 구성기능
- 종류 (세 가지)
- 계층형
- 이름과 같이, 계층구조로 데이터를 보존유지하게 됨
- 데이터를 대분류, 중분류, 소분류 등으로 분류 및 정리할 수 있을 경우에 적용. - 네트워크형
- 데이터끼리의 상호관계를 네트워크로 나타냄
- 대규모 데이터베이스에서 많이 사용됨.
- 최근에는 객체지향 기술을 사용한 DBMS도 제품화되어 있음 - 관계형
- 정보계 시스템용으로 업계표준이 되어 있는데, 최근엔 트랜잭션 처리를 목적으로 하는 업무계의 DBMS로도 사용하게 됨.
- 정보계 시스템용 DBMS
: 기간 시스템에서 축적한 데이터를 사용자가 자유롭게 검색 및 가공하도록 하기 위한 시스템으로 기획 등 여러 면에서 클라이언트/서버 시스템에 대응하기 쉽도록 되어 있다.
- 계층형
💡 DB정규화란(개요)?
자료의 손실이나 불필요한 정보의 도입 없이 데이터의 일관성, 데이터 중복을 최소화하고 최대의 데이터 안정성 확보를 위한 안정적 자료 구조로 변환하기 위해서 하나의 테이블을 둘 이상을 분리하는 작업
💡 DB정규화의 목적?
- 자료 저장에 필요한 저장 공간을 최소화
- 자료의 삽입, 갱신 및 삭제에 따른 이상 현상 제거 (데이터 무결성 유지)
- 자료 구조의 안정성 최대화
정규형 | 설명 |
제 1정규형(First Normal Form, 1NF) | 테이블의 각 셀의 값은 단일값을 가진다. |
제2정규형(2NF) | 주키가 합성키며 부분종속(Partial Dependence)이 존재할 경우 2차 정규형의 대상이 된다. |
제 3정규형 | 비주키 속성간에 발생하는 함수적 종속(이전종속)이 발생하면 3차 정규형의 대상이 된다. 이전 종속(Transitive Dependence)이 존재하지 않는 관계를 말한다. |
정규형 차수가 높을수록 데이터베이스의 무결성을 저해할 수 있는 다양한 종류의 논리적 모순이 존재할 가능성과 데이터가 중복으로 존재할 가능성을 줄여 준다.
- 차수가 높게 정규화된 테이블들은 고립 시킬 수 있는 트랜잭션들을 많이 쓰는 데이터베이스 (예 :자동입출금기기 시스템)에 많이 쓰임.
- 차수가 낮게 정규화된 테이블들은 읽기 동작이 대부분인 데이터베이스(예:리포트)에 많이 쓰임.
💡 SQL에 대해 설명해보시오.
SQL은 structured query language의 약자로 구조화 질의어
데이터 정의어(DDL)와 데이터 조작어(DML)를 포함한 데이터베이스용 질의 언어(query language)의 일종으로 데이터베이스를 사용 할 때 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어를 말한다.
💡 TCP/IP에 대해 설명해보시오.
인터넷에서 서로 다른 시스템을 가진 컴퓨터들을 서로 연결하고, 데이터를 전송하는 데 사용하는 통신 프로토콜.
TCP 는 신뢰성 있고 무결성을 보장하는 연결을 통해 데이터를 안전하게 전달해주는 L4의 전송 프로토콜이고,
IP 는 패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 L3의 통신 프로토콜이다.
💡 TCP와 UDP의 차이점에 대해 설명해주세요.
TCP 는 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다. 흐름제어 및 혼잡제어를 제공하고, 전이중, 점대점 방식이라서 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다. 높은 신뢰성을 보장하고 UDP보다 속도가 느리다.
UDP 는 데이터를 데이터그램 단위로 처리하는 프로토콜이다. 비연결형 서비스로 데이터그램 방식을 제공하고 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다. 또한, UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다. 신뢰성이 낮고 TCP보다 속도가 빠르다.
💡 임베디드 시스템이란?
: 다른 시스템에 내장되어 해당 시스템의 기능 수행을 담당하는 컴퓨팅 시스템이다.
특정 업무를 수행하기 위해 H/W와 S/W를 밀접하게 통합한 컴퓨팅 장치
- 다른 시스템에 내장
- 컴퓨팅 시스템(CPU, 메모리, 입출력 장치, 임베디드 SW가 내장)
- 특정 기능 수행
- 범용 시스템이 아님(특수 목적을 수행하기 위해 만들어짐)
- 수행 기능에 특화된 H/W 및 S/W 사용
- 임베딩하는 시스템에 따라 임베디드 시스템의 요구사항이 달라짐
- 배터리를 이용하는 휴대폰의 경우, 전력 소모의 최소화가 중요함
- 원자로 제어 시스템에 경우에는 실시간 처리가 필요함
💡 리눅스와 유닉스의 차이점은?
유닉스(Unix)
- 인터넷 서버, 워크스테이션 그리고 Solaris, Intel, HP, APPLE에서 주로 사용하는 OS입니다.
- 유닉스는 1960, 70년대 개발된 운영체제로 다양한 시스템 사이에서 이식이 가능하다.
- 다중 사용자를 지원하고 있기 때문에 시스템에 직접 로그인이 가능하고 원격 로그인 역시 가능한 네트워크 기능을 기본적으로 포함하고 있으며 멀티 태스킹이 가능하도록 만들어 졌다.
- 운영체제에 여러 가지 하드웨어 플랫폼을 최대한 맞출 수 있도록 자체 드라이버와 유틸리티를 내포하고 있기 때문에 기본적으로 운영체제로서의 기능과 유틸리티의 총체적인 집합으로 볼 수도 있다.
- 유닉스의 상표권은 오픈 그룹이 가지고 있으며 유닉스 소스 코드의 저작권은 노벨이 소유하고 있다.
리눅스(Linux)
- 오픈소스 무료 OS로, 컴퓨터 하드웨어, 소프트웨어, 게임개발, 태블릿 등에 널리 활용되고 있습니다.
- 리눅스는 유닉스를 기반으로 1991년 핀란드의 대학생인 리누스 토르발즈가 개발, 재생산된 공개 운영체제이다.
- 유닉스와 유사한 환경에 덧붙여, 저렴한 비용과 같은 특징을 중심으로 급속히 확대되어 사용되고 있다.
유닉스(Unix)에서 리눅스(Linux)가 분리되어 나왔기때문에 아버지와 아들같은 부분도 있습니다.
💡 Object란?
: Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수).
즉 절차, 방법, 기능을 모두 포함한 개념
ex) 기차역에서 승차권을 발매하는 경우,
실체인 '손님'과 동작인 '승차권 주문'은 하나의 객체이며,
실체인 '역무원'과 동작인'승차권 발매'도 하나의 객체이다.
같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고한다.
💡 Wrapper Class
- Obejct를 상속하는 모든 클래스를 참조형(Reference Type)
- 원시적인 형태로 표현하는 기본형(Primitive Type)
Primitive Type | Wrapper Class |
int | Integer |
char | Character |
byte | Byte |
short | Short |
long | Long |
double | Double |
boolean | Boolean |
Wrapper Class 란?
- 기본형(Primitive type)으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원한다.
- 기본형들을 참조형으로 나타낸 것이 Wrapper Class이다. 기본형 변수를 객체화할 필요가 있을 때 쓰인다.
- ex) 기본형 변수를 List에 저장할 때가 대표적임
💡 접근제한자 (public > protected > default > private)
public
- 접근 제한이 없다. (같은 프로젝트 내에 어디서든 사용 가능)
protected
- 같은 패키지 내, 다른 패키지에서 상속 받아 자손클래스에서 접근 가능
default
- 같은 패키지 내에서만 접근 가능
private
- 같은 클래스 내에서만 접근 가능
💡 Stack, Queue
Stack
- 후입선출 LIFO (Last in First Out)의 원리로 동작하는 선형적인 자료구조이다. 데이터가 들어가고 나오는 입구가 하나뿐이므로 입구로 들어간 데이터가 스택에 차곡차곡 쌓여있다가 마지막에 들어간 데이터가 처음에 나온다.
- push();를 이용한 데이터 입력, pop();을 이용한 데이터 출력
- 주로 계산 중에 잠시 기억해야하는 임시적인 자료를 관리하는 용도로 사용된다.
Queue
- 선입선출 FIFO (First in First Out)의 원리대로 동작하는 자료구조이다. 동일한 자료의 집합을 다운다는 면에 있어서는 스택과 비슷하지만, 가장 먼저 들어간 자료가 먼저 나오는 구조이다.
- enQueue();를 이용한 데이터 입력, deQueue();를 이용한 데이터 출력.
- 넣은 순서대로 자료를 꺼내가므로 순서대로 처리해야하는 자료를 임시적으로 저장하는 용도로 흔히 사용
- 저장되는 자료의 타입이 동일하므로 배열 또는 연결리스틀로 큐를 구현할 수 있다.
💡 Singleton Design Pattern (싱글톤 디자인 패턴, 싱글톤 패턴)
앱이 시작하고 클래스가 처음에 한번만 메모리에 할당하여 그 객체를 계속 사용하는 디자인 패턴
- 하나의 객체를 생성하였기 때문에 동시에 공유하여 사용하는 것이 불가능하다.
- API 호출같이 계속 사용하는 클래스를 싱글턴패턴으로 생성하면 메모리관리를 더 효율적으로 할 수 있다.
- 처음에만 메모리를 할당하기에 두번째 사용할 때는 객체를 호출하는 시간이 줄어들어 성능이 좋아진다.
'📌ETC > Tech Interview' 카테고리의 다른 글
신입 개발자 기술면접 질문 정리 #7 (0) | 2022.10.01 |
---|---|
신입 개발자 기술면접 질문 정리 #6 (0) | 2022.09.20 |
신입 개발자 기술면접 질문 정리 #5 (1) | 2022.09.16 |
신입 개발자 기술면접 질문 정리 #4 (0) | 2022.09.16 |
신입 개발자 기술면접 질문 정리 #3 (2) | 2022.09.16 |