일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문자열
- 스프링 빈
- 명령어
- 백준 java
- Java
- GoingBus
- 스프링 컨테이너
- 리눅스
- 자바스크립트 코딩의 기술
- JavaScript
- 반복문
- toCharArray
- 자바
- 코딩테스트
- Kotlin
- map
- 카카오
- 리눅스마스터1급
- 리눅스마스터 1급 정리
- 프로그래머스
- 백준 javascript
- 리눅스마스터 3과목
- Memoir
- 코테
- 연습문제
- 개발자 회고록
- java 백준 1차원 배열
- Linux
- 고잉버스
- 월간코드챌린지
- Today
- Total
hoon's bLog
Java 면접 질문 | 자바 관련 개념정리 본문
컴포넌트와 모듈의 차이
모듈은 가장 상위에 위치한 구현 단위. (실질적으로 구현이 된 단위)
컴포넌트는 런타임 개체를 참조하는 단위(실제적으로 동작하는 개체)
ex). 서버 클라이언트 구조에서 서버 1개에 클라이언트 50개가 있다면,
구현된 모듈은 서버1, 클라이언트 1 총 2개, 동작하는 컴포넌트는 서버1, 클라이언트 50으로 총 51개입니다.
자바는 무엇인가
자바란 객체지향 프로그래밍 언어로써 가장 중요한 특징은 운영체제에 독립적이란 것입니다.
자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능합니다.
그 이유는 자바를 실행하기 위한 가상 머신인 JVM이 있기 때문입니다.
다른 어플리케이션은 프로그램 실행 시 바로 OS로 가는 반면,
자바 어플리케이션은 각 운영체제에 맞는 JVM을 거쳐 OS로 진행되기 때문에 프로그램 수정 없이 실행 가능합니다.
JVM(Java Virtual Machine)의 특징
- JVM만 설치하면 컴퓨터의 운영체제에 상관없이 동작(ms, linux, mac 등 모두 사용 가능)
- 기본 자료형을 제외한 모든 요소들이 객체로 표현 가능
- 객체 지향 개념의 특징인 캡슐화, 상속성, 다형성이 잘 적용된 언어
- garbage collector를 통한 자동적인 메모리 관리가 가능
- 멀티쓰레드를 지원
객체지향프로그래밍(OOP, Object Oriented Programming)
오브젝트를 기준으로 코드를 나누어 구현하는 프로그래밍 방법입니다.
자바의 경우 구분단위가 클래스입니다.(구현할 때는 클래스, 사용할 때는 오브젝트)
구현한 객체들을 레고블럭 쌓듯이 합쳐서 전체 결과물을 만듭니다.
이전의 절차지향에 비해서 사람이 사고하는 방식과 더 가깝습니다.
객체지향 프로그래밍의 등장으로 인해 프로그래밍이 인간에게 더 쉽고 친절해졌습니다.
장점은 내가 만든 블록을 필요에 따라 다른 사람이 사용할 수 있습니다(재사용성)
협업하기 쉽고, 블럭을 가져다 쓸 때는 그 블록의 내부구조가 어떤지 신경 쓸 이유가 없습니다(캡슐화, 추상화)
OOP 특징
- 객체 지향 프로그래밍은 코드의 높은 재사용성
- 코드 변경이 용이
- 직관적인 코드 분석이 가능
- 개발속도가 향상
- 상속을 통한 장점이 극대화
Garbage Collection
가비지 컬렉션은 쓰레기 메모리들을 정리해주는 기능을 말합니다.
시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블록을 찾아서,
자동으로 다시 사용가능한 자원으로 회수하는 것입니다.
garbage collection을 수행하는 부분을 garbage collector라고 부릅니다.
Primitive type과 Reference type(기본형 vs 참조형)
Primitive type : stack 메모리 영역에 실제 값을 저장하는 데이터 타입이며 변수에 값 자체를 저장하는 것입니다.
- 정수형 : byte, short, int, long
- 실수형 : float, double
- 문자형 : char
- 논리형 : boolean 입니다.)
Reference type : 메모리 상에 객체가 있는 위치를 저장하는 것입니다.
- String, 클래스, 인터페이스, Array 등 모든 변수는 참조형 변수입니다
- 새로 만들 때는 heap 메모리에 저장공간을 확보하며 항상 new로 정의합니다
- 실제 값은 heap영역에 저장되고 stack에는 메모리 주소만 저장됩니다.
Object
객체는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수) 즉 절차, 방법, 기능을 모두 포함한 개념이다
기차역에서 승차권을 발매하는 경우 실체인 손님과 동작인 승차권 주문은 하나의 객체이며
실체인 역무원과 동작인 승차권 발매도 하나의 객체이다.
같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.
Overloading
- 클래스 내에 같은 이름의 메서드를 여러 개 정의하되, 매개변수 타입이 다르거나 개수가 달라야 한다.
- 부모 클래스의 메서드를 하위 클래스에서 재정의 하는 것이다.
- 부모 클래스에서 상속받은 것들을 다시 자신의 클래스에서 새로이 재정의 하는 것을 말합니다.
- 재정의 한 것은 자신의 클래스 내부에서만 영향을 끼치며 부모 클래스에서는 영향을 끼치지 않습니다.
- 할머니-부모-자식클래스 구조라면 자식 클래스는 할머니, 부모 클래스의 것들을 모두 상속받을 수 있으며,
- 할머니와 부모클래스의 같은 변수가 있다면 부모 클래스를 물려받게 됩니다.
- 간단히 말해 오버라이딩은 부모 클래스가 갖고 있는 메서드를 자식 클래스에 재정의해 사용합니다.
- 개발자들 사이의 약속으로 메서드의 이름 하나로 개발의 효율성을 높인다.
상속
기존 클래스의 기능을 유지하면서 추가적인 기능을 추가하여 클래스를 만들고 싶을 때 사용하는 방법입니다.
새로운 클래스를 생성할 때 상위 클래스를 지정함으로써 상위 클래스의 모든 기능, 속성을 제공받고,
자신의 클래스에는 부가적인 기능, 속성을 추가할 수 있습니다.
- 상속은 코드를 간결화하며 재사용성을 높일 수 있습니다.
- 기존 클래스의 변수와 메서드를 그대로 가지면서 추가적인 기능도 가지는 클래스를 새로 만드는 것입니다.
- 복잡한 문제를 나누어서 공통부분부터 구현하기 위해 사용합니다.
- 변수와 메소드를 그대로 쓰므로 코드 중복을 줄일 수 있음.
- 객체를 사용하는 클래스 외부적인 관점으로 봤을 때 연필, 지우개, 볼펜을 모두 필기도구라고 묶어서 처리할 수 있으므로 효율적인 코드가 됨.
다형성
하나의 클래스나 함수가 다양한 방식으로 동작이 가능한 것을 말합니다.
하나의 메시지가 전달되었을 때 수신자가 누구냐에 따라 각각 다른 기능을 수행합니다.
예를 들어 저는 하나이지만, 학교에 있으면 학생이고 집에서는 아들이라는 구성원입니다.
하나의 지시(ex. 메서드를 실행하는 것)에 대해 여러 객체가 각자 다른 행위를 수행하는 것입니다.
자바에서 overloading이나 overriding이 이에 해당됩니다.
Servlet, JSP
JSP(Java Server Page) : HTML 소스 코드 속에 자바 소스코드가 들어가는 구조를 갖는 웹 애플리케이션 프로그래밍 기술
Servlet : Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것
(Servlet의 경우 자바에서 html 코드를 작성해야 하기에 불편해 jsp를 사용)
Web Container : 웹 서버에서 전달받은 JSP파일을 서블릿으로 변환하여 서블릿의 결과를 웹서버에게 전달하는 것
Get / Post 방식
GET방식
- 클라이언트에서 서버로 데이터를 전달하라 때, 주소 뒤에 주소명과, 값이 결합된 스트링 형태로 전달하는 방식
- 주소창에 쿼리 스트링이 그대로 보이기 때문에 보안성이 떨어짐
- 길이에 제한
- post방식보다 상대적으로 빠른 전송속도
POST 방식
- 일정 크기 이상의 데이터를 보내야 할 때 사용(Get 보다 상대적으로 느림)
- 서버로 보내기 전에 인코딩을 하고 전송 후에는 서버에서 다시 디코딩
- 주소창에 전송하는 데이터 정보가 노출되지 않아 GET 방식에 비해 높은 보안성
- 쿼리 스트링(문자열) 데이터뿐만 아니라, radio, textarea, input, hidden과 같은 객체들의 값도 전송 가능
- 헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고, 데이터 길이 제한 없음
GET/POST 차이점
- get은 주로 웹 브라우저가 웹서버에 데이터를 요청할 때 사용
- post는 웹브라우저가 웹서버에 데이터를 전달하기 위해 사용
- get을 사용하면 웹 브라우저에서 웹서버로 전달되는 데이터가 인코딩 되어 URL에 붙습니다
- post방식은 전달되는 데이터가 보이지 않는다.
- get방식은 전달되는 데이터가 255개 문자를 초과하면 문제가 발생할 수 있다.
- 웹 서버에 많은 데이터를 전달하기 위해서는 POST방식을 사용하는 것이 바람직하다
RESTFUL
해당 URL만 보더라도 바로 어떤 작업을 하는지 알 수 있도록 하나의 데이터는 하나의 URL을 갖도록 작업하는 방식
- Delete 방식 : RESTFUL에서 삭제 기능 사용할 때
- PUT/PUSH 방식: RESTFUL에서 수정 기능 사용할 때
Session과 Cookie를 사용하는 이유
현재 우리가 인터넷에서 사용하고 있는 http 프로토콜은 연결 지향적인 성격을 버렸기 때문에,
새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며,
이전 페이지와 현재 페이지 간의 관계가 지속되지 않습니다.
이에 따라 http 프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안,
그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용합니다..
Session(서버에 저장)
- 특정 웹 사이트에서 사용자가 머무르는 기간 또는 한 명의 유저의 한 번의 방문을 의미
- session에 관련된 데이터는 server에 저장
- cookie에 비해 좋은 보안성(사용자에게 저장되지 않기 때문)
Cookie(클라이언트에 저장)
- 사용자 정보를 유지할 수 없다는 http의 한계를 극복할 수 있는 방법
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보
- 쿠키는 인터넷 사용자가 특정 웹 서버에 접속할 때 생성되는 개인 아이디와 비밀번호,
방문한 사이트의 정보를 담은 임시 파일로써 Server가 아닌 Client에 텍스트 파일로 저장되어,
다음에 해당 웹 서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을
파악할 때 사용됩니다.
- 쿠키는 Client PC에 저장되는 정보이기 때문에 다른 사용자에 의해서 임의로 변경이 가능하여 정보유출이 가능하다.
- 세션을 사용하여 모든 정보를 세션에 저장하면 서버의 메모리를 과도하게 사용하게 되어,
서버에 무리가 있기 때문에 보안이 낮더라도 쿠키를 사용한다.
MVC 패턴
애플리케이션을 model, view, Contoller 영역으로 구분하여 개발합니다.
영역 간의 결합도를 최소화한 디자인 패턴입니다.
디자이너, 개발자 영역이 분리되어 분업화가 쉬워지며 유지보수가 용이합니다.
MVC 구성 요소
model : 애플리케이션에 비즈니스 로직과 사용되는 데이터를 다루는 영역
view : 사용자 인터페이스 내의 구성요소들을 표현(사용자에게 보이는 화면으로 jsp를 통해 구현)
Controller : model과 View를 연결하고 있는 클래스를 대표하며 model과 view 내의 클래스들 간 정보교환에 사용
Interface
- 일종의 추상 클래스
- 오직 추상 메서드와 상수만을 멤버로 갖는다
- implements 키워드를 사용한다.
- 상속의 관계가 없는 클래스 간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.
- Extends는 하나의 클래스 상속 가능하나 interface는 다중 상속이 가능하다.
Abstract
-추상 메서드를 하나 이상 가진 클래스
-자신의 생성자로 객체 생성이 불가능
- 하위 클래스를 참조하여 상위 클래스의 객체를 생성
- 하위 클래스를 제어하기 위해 사용한다.
Interface / Abstract
- new 연산자로 인스턴스 생성이 불가
- 프로토타입만 잇는 메서드를 갖는다
- 사용하기 위해서는 하위 클래스에서 확장 또는 구현해야 한다.
- 사용하는 키워드가 다르고, Abstract는 일반 메서드를 사용할 수 있지만, interface는 메서드 선언만 가능
Call by Reference : 매개 변수의 원래 주소에 값을 저장하는 방식, 클래스 객체를 인수로 전달한 경우
Call by Value : 인수로 기본 데이터형을 사용 , 주어진 값을 복사하여 처리하는 방식
메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미치지 않습니다.
Static의 의미
- 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미
- 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재합니다.
Framework 중요
소프트웨어 제작을 편리하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여
이것을 모아둔 것입니다. 프레임워크를 사용하면 개발 생산성이 증가하고, 품질이 향상되며, 유지보수가 편리합니다.
반면 익숙해지는데 시간이 오래 걸리면서 유연성이 부족하며 언어가 아닌 프레임워크를 배우게 되어
실력 향상의 부작용이 있습니다.
Spring Framework와 전자정부 프레임워크의 차이점
Spring Framework는 전자정부 프레임워크 기반의 기술을 사용하고 있어 스프링에 필요한 기술을 주입해야 합니다.
반면, 전자정부는 필요 없는 기술들을 덜어내는 차이가 있고, 대한민국 공공기관의 웹서비스 개발 시 사용을 권장하는 프레임워크입니다.
Spring Framework의 중요성
- Java 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
- Java 엔터프라이즈 개발을 편하게 해주는 경량급(크기, 부하 측면에서 경량) 오픈소스 어플리케이션
- Java 개발을 위한 프레임워크로 종속 객체를 생성해주고 조립해주는 도구
- Java로 된 프레임워크로 Java SE로 된 Java 객체(POJO)를 Java를 Java EE에 의존적이지 않게 연결해주는 역할
- IoC(제어 역행)라는 기술을 통해 애플리케이션의 느슨한 결합 도모
- AOP(관점지향 프로그래밍)을 위한 풍부한 자원 제공
- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너
- 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정
라이브러리 vs 프레임워크
프레임워크는 큰 틀을 제공하고 내 코드는 프레임워크의 틀 안에서 맞춰서 작성해야 합니다.
큰 뼈대는 이미 잡혀있고, 그 안의 내용물을 채우는 느낌입니다.
작동할 때 코드 실행 흐름을 보면 프레임워크가 내 코드를 호출합니다.
라이브러리는 사용할 수 있는 함수들의 모음으로,
내가 능동적으로 호출해서 사용할 수 있습니다.
Thread
프로세스 내에서 동시에 실행되는 독립적인 실행 단위를 말합니다.
Java 프로그램을 구성하는 명령문은 순서대로 하나씩 처리되는 것이 기본입니다.
이러한 실행 흐름을 스레드라고 합니다.
둘 이상의 흐름을 갖도록 만들고 싶다면 멀티스레드 프로그램을 사용하면 됩니다.
(Process : 운영체제에서 실행 중인 하나의 프로그램(하나 이상의 Thread 포함))
Process 내에서 실행되는 세부 작업 단위로 여러 개의 Thread가 하나의 Process를 이룹니다.
Multi Thread
하나의 프로그램에서 둘 이상의 작업이 필요로 할 때 사용합니다.
자원을 효율적으로 사용 가능하며 작업이 분리되어 코드가 간결해집니다.
Thread 장단점
Thread는 빠른 프로세스를 생성하고, 적은 메모리로 사용이 가능하며, 정보를 쉽게 공유할 수 있습니다.
하지만 다중 프로그래밍 체제인 상태로, 하나 또는 그 이상 프로세스가 수행할 수 없는 교착 상태에 빠질 수 있습니다.
Java에서 Thread 구현
java.lang, Thread 클래스 상속과 java.lang.Runnable 인터페이스를 구현합니다.
접근제한자(public > protected > default > private)
- public : 같은 프로젝트 내에서 어디든 사용이 가능하여 접근 제한이 없습니다.
- protected : 같은 패키지 내, 다른 패키지에서는 상속받아 자손 클래스에서 접근 가능합니다.
- default : 같은 패키지 내에서만 접근 가능합니다.
- private : 같은 클래스 내에서만 접근 가능합니다.
Socket 통신(TCP / UDP)
TCP(Transmission Control Protocol)
- 연결형 서비스 제공
- 높은 신뢰성 보장
- 데이터 흐름제어, 혼잡 제어
- 전이중, 점대점 서비스 제공(양방향 송수신 서비스)
UDP(User Datagram Protocol)
- 비연결형 서비스 제공
- 낮은 신뢰성
- 데이터의 전송 순서가 바뀔 수 있음
- TCP보다 빠른 전송속도
Stack / Queue
Stack
- LIFO(Last In First Out)의 후입선출 구조
- push()를 이용한 데이터 입력, pop()을 이용한 데이터 출력
ex). System Stack : 함수의 호출과 복귀 순서는 Stack의 구조를 응용하여 관리
Queue
- FIFO(First In First Out)의 선입선출 구조
- enQueue()를 이용한 데이터 입력, deQueue()을 이용한 데이터 출력
ex). 우선순위가 같은 작업 예약(인쇄 대기열), 선입선출이 필요한 대기열(티켓 카운터)
Singleton Design Pattern
디자인 패턴 중 하나로 싱글톤은 하나의 객체로만 즉, 1개의 객체만 되도록 만드는 것입니다.
Design Pattern
설계 시 반복적으로 나타나지는 설계 방법 또는 구조들을 말합니다.
디자인 패턴을 이용하게 되면 코딩이 명확하고 단순하며 모듈을 세분화 시킬 수 있고,
재사용성이 높으며 유지보수가 쉬워집니다.
디자인패턴은 대표적으로 GoF 23가지 패턴이 있습니다.
패턴들의 대부분의 공통점은 추상클래스나 인터페이스로부터 상속받은 클래스를 사용하며,
이는 객체지향의 다형성을 이용한 방법입니다.
Database에서 Index
Index : 데이터베이스 분야에 있어서 테이블 동작 속도를 높여주는 자료구조
Index는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성이 가능합니다.
빠른 검색뿐만 아니라, 레코드 접근과 효율적인 순서 매김 동작에 대해 기초를 제공합니다.
Index를 저장하는데 필요한 디스크 공간은 보통 테이블을 저장하는데 필요한 디스크 공간보다 작습니다.
DB에서 자료를 검색하는 2가지 방법
- FTS(Full Table Scan) : 테이블을 시작부터 끝까지 검색하는 방법
- Index Scan : Index를 검색하여 해당 자료의 테이블을 액세스 하는 방법
'잡동사니' 카테고리의 다른 글
면접에서 나올법한 자바 면접 질문 정리 (0) | 2021.01.21 |
---|---|
주식관련공부 블로그 (0) | 2020.12.30 |