[ Java ]
Overriding & Overloading
Try-catch-Finally
싱글톤 패턴 장단점
싱글톤 패턴 인스턴스가 오직 1개만 생성되어야하는 경우 사용되는 패턴입니다. 단일 객체만 존재해야 하고, 애플리케이션의 여러곳에서 공유하는 경우 주로 사용되는 디자인패턴입니다.
싱글톤 한계
1) private 생성자이기 때문에 상속할 수 없음
2) 테스트하기 어려움
3) 서버환경에서 싱글톤이 하나만 만들어지는 것을 보장하지 못함
4) 싱글톤 패턴은 애플리케이션 어디서든지 접근가능하기 때문에 전역상태로 사용될 수 있어 바람직하지 못함
Call by Value & Call by Reference
접근 제한자
- public : 접근 제한 X ( 같은 프로젝트 내 어디서든 사용 가능)
- protected : 해당 패키지내, 다른 패키에서 상속받아 자손클래스에서 사용가능
- default : 해당 패키지 내에서만 접근가능
- private : 해당 클래스에서만 접근가능
Static
- static 변수와 static 메소드, static 블럭을 만들수 있다.
- 객체에 소속된게 아닌 클래스에 고정.
- 객체 생성을 하지 않고 클래스 변수나 메소드를 호출하도록 한다.
- 장점 : static 영역에 할당 되기때문에 모든 객체가 공유하여 참조할 수 있음
단점 : G.C의 관리 영역 밖이기 때문에, 프로그램 종료시까지 메모리에 값이 유지 -> 성능 악영향..
전역변수, 지역변수
- 전역변수
1. 클래스변수
선언위치 : 클래스영역, 클래스가 메모리에 올라갈 때, 다른 클래스에서도 호출가능
2. 인스턴스변수
선언위치 : 클래스 영역, 인스턴스가 생성되었을 때,
- 지역변수
선언위치 : 메서드, 생성자, 초기화블럭 내부, 변수 선언문 수행후 소멸
CheckedException & UnCheckedException
CheckedException : 컴파일 시 확인하는 예외, 예외처리하지 않을 경우 컴파일 되지 않음.
UnCheckedException : 런타임 시 확인하는 예외, 컴파일은 되나 런타임(실행) 되지 않는다.
Java 8의 특징
람다, 스트림, Optional
[ Spring ]
뭔진 알고, 사용할 줄도 알지만, 말로 설명할 줄 알아야 함
Spring Version
Spring Context : 5.3.1 사용
Maven or Gradle 설명
DI
Dependency Injection : 의존성 주입
객체간의 의존성을 자신이 아닌 외부에서 주입하는 개념
각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
설명 :
필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 사용하는 것.
-> 결합도를 낮추고 재사용성을 증가시킴
@Autowired
생성자, 세터, 필드 주입이 있음
생성자 주입의 장점
1. 순환참조 방지
2. 불변성을 가짐
3. 테스트에 용이
필드 주입 장점
1. 간단
단점
1. 외부에서 변경하기 힘듬,
2. 프레임워크에 의존적
세터 주입
단점
- setter 메서드를 public으로 열어두어야하기 때문에 어디서든 변경이 가능
컴포넌트 스캔
@Service 등 빈등록 애노테이션에는 @Component가 내장되어있다.
@Component 애노테이션이 있으면 스프링빈으로 자동 등록된다.
그렇기 때문에 @Service, Respository, Controller 등을 사용해도 괜찮음.
이러한 행위를 컴포넌트 스캔이라 한다.
AOP
Aspect Oriented Programming : 관점 지향 프로그래밍
트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
기능의 분리 문제를 해결하기 위해 만들어짐.
핵심관심사항(모듈), 공통관심(횡단관심모듈)로 분리.
업무 로직 - 핵심기능(core)
을 도와주는 부가적인 기능 - 부가기능(cross-cutting)
OOP를 적용해도 기능분리가 어려울때 AOP가 해결
핵심 비즈니스 로직에 있는 공통 관심사항을 분리해서 모듈화.
인증, 로깅, 트랜잭션 처리할 때 용이함.
중복코드제거, 재활용성 극대화, 변화수용의 용이성
OOP를 돕는 보조적인 기술.
프록시 패턴 기반
- Spring이 Target에 대한 Proxy를 만들어제공
- Target을 감싸는 Proxy가 Runtime에 생성
- Proxy는 Advice를 Target 객체에 적용하면서 생김
- Proxy 객체를 쓰는 이유는 접근제어, 부가기능을 추가하기 위함
Proxy가 호출을 가로챔(Interceptor)
즉, 필수적이지만 어쩔 수 없이 반복적으로 사용되는 코드들을 리팩토링할 수 있도록 해줍니다.
이로인해 여러 곳에서 사용될만한 코드들이 한 곳에서 유지하고 관리할 수 있는 이점을 갖게 됩니다.
Restcontroller & Controller
MVC 구동방식
Log Framework
slf4j, log4j
Gradle
Filter & Interceptor
1. Filter는 Dispatcher servlet의 앞단에서 정보를 처리하고,
Interceptor는 Dispatcher servlet에서 Handler(Controller)로 가기 전에 정보를 처리한다.
2. 또한 필터는 J2EE 표준 스펙에 정의 되어 있는 기능이며, 인터셉터의 경우는 Spring Framework에서
자체적으로 제공하는 기능이라고 한다.
Spring Security
Spring Scheduler
[ Database ]
Join의 종류와 사용법
- Inner Join
- Outer Join
- Cross Join
- Self Join
- Full Join
Inner Join 1:N일 때 결과
결과 : N
(1에 해당하는 컬럼의 데이터가 N에 여러개 있기 때문에 여러 데이터가 나옴)
1:N Join의 경우 기준이 되는 테이블의 데이터가 중복되는 결과를 Return.
이때 만족하는 값이 없을 경우 값이 아예 조회되지 않기 때문에 Outer Join을 이용하여
만족하는 값이 없더라도 기준이 되는 값과 null값으로 같이 조회되게 해야한다.
Procedure :
자주 사용되는 쿼리를 모듈화 시켜서 객체로 저장하고, 필요한 시점에 불러서 사용
장점 :
- 네트워크 트래픽 감소(시간 단축)
Trigger :
이벤트 발생하면 그에 따른 작업이 자동으로 처리됨.
특정 테이블의 데이터에 변경이 가해졌을 때 자동으로 수행되는 일종의 저장 프로시저
DB 연결정보(Local & Service) 관리 방법
Source파일에 연결정보를 입력해놓고 배포하는것이 아닌,
Properties파일 또는 연결정보가 담긴 파일을 별도로 만들고, 해당 파일을 파일입출력으로 불러들여서 사용하는 방식을 채택할 것.
View
--View는 SQL문장 덩어리
select * from v_001; --view 가지고 있는 SQL문장이 실행
--VIEW 생성 사용 목적
--1. 개발자의 편리성 (성능 ....떨어진다) : JOIN , Subquery 작업시 실제 테이블이 없는 경우....
--2. 편리성(쿼리 단순화) : 복잡한 쿼리를 view 작성해 두면 편하게 사용가능
--3. 관리자 측면 >> 보안성 >> view 통해서 특정 컬럼만 노출
쿼리 구동 순서
FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > ORDER BY > DISTINCT > LIMIT
INDEX란?
테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과는 달리 Index를 검색하여 해당 자료의 테이블을 엑세스 하는 방법.
ex) 데이터의 목차 같은 느낌(특정 데이터의 위치를 찾을 수 있는)
인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행속도가 느려집니다.
즉, 인덱스는 데이터의 저장 성능을 희생하고 그대신 데이터의 검색 속도를 높이는 기능이라 할 수 있음.
DBMS의 Index 관리방법
B+Tree 인덱스 자료구조
- 자식 노드가 2개 이상인 B-Tree를 개선 시킨 자료구조
- BTree 리프 노드들을 LinkedList로 연결하여 순차 검색을 용이하게 합니다. 해시 테이블보다 나쁜 시간복잡도를 갖지만 일반적으로 사용되는 자료구조.
HashTable
- 컬럼의 값으로 생성된 Hash를 기반으로 index를 구현
- 검색이 매우 빠름
- 부등호(< , >)와 같은 연속적인 데이터를 위한 순차 검색이 불가능하기 때문에 사용에 적합하지 않음.
Join 시 가상테이블로 묶고 조회 후 재 조회 하는 방식이 속도에 더 우수함.
설계방식
Group by & Having
Having은 Group by를 위한 조건 처리 함수
Union & Union All
행을 그대로 붙임. Union All은 중복값 제거 없이 그대로 붙임
[ 보안 ]
알고보면 아는 내용이지만, 뭘 물어보는 건지 알아듣는 것도 중요.
SQL Injection & Mybatis
SSL
Http & Https와 연관.
Http -> SSL -> 연결
중간에서 보안 관련 처리를 해준다.
SSO 통합인증
[ Environment & WEB ]
AWS EC2
Linux
WS
Nginx & Apache
[ Etc]
하루 학습량
프로젝트 진행중 의사소통 방식
본인의 어필요소
프로젝트 완성도
[ +@ ]
사용해본 기술 중 한계 또는 불편함을 느껴 다른 기술을 도입해본 적 있는지
에러 오류 정리