JAVA
1. 기본형 변수 타입
1 byte | 2 byte | 4 byte | 8 byte | |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
※ 1 byte = 8 bit
2. 인자(argument)와 매개변수(parameter)
• 호출할때 "인자"를 전달 한다고 표현
• 메서드를 만들때 "매개변수"를 지정했다고 표현
3. 오버로딩 VS 오버라이딩
• 오버로딩 : 기존에 없던 새로운 메서드를 정의 하는것 (같은 메서드명, 다른 매개변수)
• 오버라이딩 : 상속 받은 메서드의 내용을 변경하는것(메서드 재정의)
4. 추상클래스(abstract) VS 인터페이스(interface)
• 추상 클래스 : 추상메서드가 하나이상 포함되어있어야함, 상속되어 구현되는것이 목적
• 인터페이스 : 모든 메서드가 추상 메서드로 정의 되어있어야 함, 인터페이스를 구현한 객체들은 같은 메서드가 있다는 보장
5. 자바 에플리케이션 실행 과정
• 자바 소스 코드 : 개발자가 Java로 작성한 소스 파일로 확장자 명은 .java
• 자바 바이트 코드 : 클래스코드가 읽을 수 있도록 컴파일된 파일 확장자명은 .class
• Methode Area : 클래스가 사용되면 클래스별로 클래스 정보가 저장되는 영역(static 변수, static 메소드 등)
• Heap Area : 인스턴스가 생성되는 영역 (Garbage Collection의 대상이 되는 영역)
• Stack Area : 메서드 실행에 필요한 메모리 공간(매개변수, 지역변수, 리턴정보등 을 저장)
• PC Register : 현재 수행중인 JVM 명령어가 저장
• Native Method Area : 자바 외의 언어 (C, C++ 등)를 수행하기위한 영역
6. 가비지 컬렉션(Garbage Collection)
• JVM에서 메모리를 관리해주는 모듈
• Heap 메모리를 재활용 하기 위해 더이상 참조하지 않는 인스턴스들을 메모리에서 제거
• 개발자가 직접 메모리를 정리하지 않아도 됨
• 참조 되지 않는 객체를 찾는 과정에서 Mark and Sweep이 발생하여 스레드가 잠깐 멈춤
7. 객체 지향 프로그래밍
• 현실 세계의 사물과 같은 객체를 만들고, 객체에 필요한 특징을 뽑아 프로그래밍을 수행
• 특징
- 추상화 : 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
- 캡슐화 : 실제 구현되는 부분을 외부에 드러나지 않도록 은닉
객체가 독립적으로 역할을 수행하도록 데이터를 하나로 묶어 관리 (응집도가 높아짐)
데이터를 보이지 않고 외부와 상호작용을 할 때 메서드를 이용 (결합도가 낮아짐)
- 상속성 : 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는것
- 다형성 : 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는것 (오버로딩, 오버라이딩)
• 좋은 객체 지향 설계의 5가지 원칙(SOLID)
- SRP 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야한다.
변경이 있을때 파급효과가 적으면 단일 책임 원칙을 잘 따른것 (객체의 생성과 사용을 분리)
※ 책임의 범위를 잘 조절해야함
- OCP 개방 폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야한다. (다형성)
역할과 구현을 분리, 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하는것.
- LSP 리스코프 치환 원칙 : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 함. 컴파일은 잘 되더라도 규약을 위배하면 LSP 위반.
자동차 인터페이스의 엑셀은 앞으로가라는 기능, 뒤로가게 구현하게되면 LSP 위반, 느리더라도 앞으로가야함.
- ISP 인터페이스 분리 원칙 : 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리
사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리
정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음
인터페이스가 명확해지고, 대체 가능성이 높아짐
- DIP 의존 관계 역전 원칙 : 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
스프링의 의존성 주입은 이 원칙을 따르는 방법중에 하나.
클라이언트 코드가 구현 클래스를 바라보지 말고 인터페이스를 바라보라는 뜻.
역할에 의존해야지 구현에 의존하지 말라는것.
의존 = 내가 그 코드를 안다.
8. 컬렉션 프레임 워크
8.2 Java 컬렉션 프레임워크 구조도
데이터 군을 저장하는 클래스를 표준화 한 설계
List | • 순서가 있는 데이터 집합, 데이터의 중복을 허용함 • ArrayList, LinkedList, Stack, Vector |
Set | • 순서를 유지 하지 않는 데이터 집합, 데이터 중복을 허용하지 않음 • HashSet, TreeSet |
Map | • 키와 값의 쌍으로 이루어진 데이터 집합, 순서유지가 안됨, 키는 중복이 불가, 값은 중복이 가능 • HashMap, TreeMap, HashTable |
8.2 List
• 순서가 있고 중복을 허용, 인덱스로 원소에 접근이 가능, 크기가 가변적
• ArrayList
◦ 배열을 기반으로 데이터를 저장
◦ 단반향 포인터 구조로 데이터 순차적 접근에 강점
◦ 데이터 삽입, 삭제에 불리하나, 순차적 추가/삭제는 빠름
◦ 임의의 요소에 대한 접근성이 뛰어남
• LinkedList
◦ 연결 기반으로 데이터를 저장
◦ 각 요소(node)들은 자신과 연결된 다음요소에 대한 참조 주소값과 데이터로 구성되어있음
◦ 양방향 포인터 구조로 데이터 삽입, 삭제가 빠름
◦ 임의의 요소에 대한 접근성이 안좋음
8.3 Set
• 순서가 없고 중복된 데이터를 허용하지 않음, 중복되지 않은 데이터를 구할 때 유용, 빠른 검색 속도를 가짐
• HashSet
◦ 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않음
◦ NULL 값을 허용
◦ TreeSet보다 삽입, 삭제가 빠름
• LinkedHashSet
◦ 입력된 순서를 보장
• TreeSet
◦ 이진 탐색 트리(Red-Black Tree)를 기반으로 함
◦ 데이터들이 오름차순으로 정렬
◦ 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠름
8.4 Map
• Key와 Value의 한쌍으로 이루어지는 데이터의 집합. Key에 대한 중복이 없으며 순서를 보장하지 않음, 뛰어난 검색 속도
• HashMap
◦ Key에 대한 중복이 없으며 순서를 보장하지 않음
◦ Key와 Value 값으로 NULL을 허용
◦ 동기화가 보장되지 않음
◦ 검색에 가장 뛰어난 성능을 가짐
• HashTable
◦ 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느림
◦ Key와 Value 값으로 NULL을 허용하지 않음
• LinkedHashMap
◦ 입력된 순서를 보장
• TreeMap
◦ 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장
◦ Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능
◦ 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸림
9. HashTable
※ 해시함수(key) → 해시코드 → Index → Value
• 검색하고자하는 key 값을 입력 받아 해시함수로 로직을 수행
• 반환된 해시코드를 배열의 Index로 환산하여 데이터에 접근 하는 자료구조
10. String, StringBuffer, StringBuilder
10.1 String VS StringBuffer, StringBuilder
• String : 불변의 속성을 가짐
// ① 메모리 할당
String str = new String("hello");
// ② 기존 메모리가 아닌 새로운 메모리에 할당
str = str+" world";
• StringBuffer, StringBuilder
// ① 메모리할당
StringBuffer sb = new StringBuffer("hello");
// ② 기존 메모리에 append
sb.append(" world");
10.2 StringBuffer VS StringBuilder
• StringBuffer : 동기화 키워드를 지원하여 멀티스레드 환경에서 안전함
• StringBuilder : 동기화 지원이 안되지만 단일스레드 환경에서 성능이 좋음
11. 제네릭스(Generics)
• 다양한 타입의 객체들을 다루는 메서드나 컬렉션에 컴파일 시 타입을 체크해주는 기능(JDK 1.5에 도입)
• 타입의 안정성 제공
• 타입체크와 형변환을 생략할 수 있어 코드가 간결해짐
12. CheckedException과 UnCheckedException
CheckedException | UnCheckedException | |
처리여부 | 개발 시 반드시 예외를 처리해야함 | 예외 처리를 강제 하지 않음 |
확인시점 | 컴파일 단계 | 실행단계(Run Time) |
예외 종류 | RunTimeExcepion을 제외한 모든 예외 SQLException IoException |
RunTimeException 하위 예외 NullPointException IndexOutOfBoundException |
13. int와 double, Integer와 Double등의 래퍼 타입과 Primitive 타입의 차이점
• Primitive 타입은 변수에 값자체를 저장하지만 래퍼타입은 변수에 객체의 주소 값을 저장
• int에는 null을 넣을수 없지만 Integer는 객체이기 때문에 null 입력이 가능
• Boxing : Primitive 타입을 래퍼타입으로 바꾸는것
• UnBoxing : 래퍼타입을 Primitive 타입으로 바꾸는것
14. 익명 클래스와 람다 표현식의 차이
• 익명 내부 클래스는 새로운 클래스를 생성하지만, 람다는 새로운 메서드를 생성하여 포함.
• 내부 클래스는 새로운 클래스파일이 생성
• 람다는 static 이든, 객체 사용을 위한 non-static 이든, 메서드로 생성.
• 익명 내부 클래스의 this : 새로 생성된 클래스, 람다의 this : 람다식을 포함하는 클래스
• 람다표현식이 클래스 정의와 구현을 동시에 하여 코드가 더 간결함
• 프로그램 내에서 한번 만 객체로 만드는데 클래스를 정의하고 생성하는 것이 비효율적
15. 스레드를 생성하는 방법
• Runnable 인터페이스를 Implements 하여 run 메서드를 정의
• Thread 클래스를 상속 받아 run 메서드를 오버라이딩
JSP
1. Servlet과 JSP, MVC
• Servlet
- 자바 소스코드에서 response로 PrintWriter객체에 HTML 소스를 삽입하여 response를 함
- 웹페이지를 동적으로 생성하기 위한 서버측 프로그램
- 자바를 기반으로 만들어지면 WAS위에서 컴파일되고 동작함
• JSP
- JavaServerPage의 약자로 HTML 소스에 스클립틀릿(<% ... %>)에 자바소스를 작성
- 웹페이지를 동적으로 생성하기 위한 웹 어플리케이션 도구
- Java 기반의 서버사이드 스크립트 언어
※ 스크립트 언어란 컴파일 없이 내장된 번역기로 실행할 수 있는 프로그래밍언어
- JSP 컨테이너에서 서블릿을 생성하여 컴파일 후 실행하는 구조
• MVC
- Model View Controller : 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것
- 컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행. 뷰에 전달할 결과 데이터를 조회해서 모델에 담음.
- 모델: 뷰에 출력할 데이터를 담아서 뷰에 전달함. 따라서 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있음
- 뷰: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중. (HTML을 생성하는 부분)
2. EL과 JSTL
• JSP 작성을 도와주는 언어와 라이브러리
• EL
- Expression Language
- JSP에서 객체의 값을 쉽게 꺼내 쓸수 있는 도구
- HTML : <span>${prod.no}</span>
- Javascript : "${prod.no}"
- 스크립틀릿안에서 값을 가져오고 할당할 필요가 없음
<%=((Product)request.getAttribute("prod")).getNo()%>
• JSTL
- JSP Standard Tag Library
- 일반적으로 JSTL + EL의 조합을 의미함
- JSP에서 자주 사용하는 스클립틀릿을 하나의 태그로 묶은 라이브러리
ex) <c:set>, <c:if>, <c:forEach> ...
※ <c:out> 태그를 쓰는 이유
- Cross-site Scripting 공격은 스크립트를 주입시켜서 사이트를 침입
- c:out 태그를 사용할 시에 이 HTML에서 사용하는 특수 문자를 HTML 엔티티로 변경해줌(escape)
- 크로스 사이트 스크립팅을 막아줌
'일상의 흔적 > Study' 카테고리의 다른 글
면접 DataBase 질문 - 3 (0) | 2023.03.25 |
---|---|
면접 SPRING 질문 - 2 (0) | 2023.03.22 |
자바 ORM표준 JPA 프로그래밍 (기본편) : STS로 세팅 (0) | 2023.03.22 |
자바 ORM표준 JPA 프로그래밍 (기본편) : JPA소개 - 1 (0) | 2023.03.22 |
생활코딩 OAuth2.0 (0) | 2023.03.21 |