반응형

의존, 의존성이란?
-> A는 B를 사용하기만 해도 A는 B에 의존한다 할 수 있다.
- ex) new() 쓰는거


의존성 주입 : DI(Dependency Injection)
- 의존성을 약화시키는 테크닉
- 필요한 값을 new해서 인스턴스화 하는게 아니라 외부에서 넣어주는거
- new() 는 사실상 하드코딩이다. 

 

의존성 역전(Dependency Inversion)
- DIP라고 부른다.
- 화살표의 방향을 바꾸는 테크닉이라고 보면 된다.
- 의존성 역전은 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
- 세부사항에 의존해서는 안되고 세부 사항이 추상화에 의존해야 한다.  

인터페이스와 구현을 분리  / 화살표 방향이 바뀜 -> 의존성을역전

 

 

 

반응형

1. 오버라이딩의 조건

자손클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와
- 이름이 같아야 한다. 
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 할때
1. 접근 제어자를 조상 클래스의 메서드 보다 좁은 범위로 변경할 수 없다.
2. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다. 혹은 상우의 예외(Exception)으로 선언할 수 없다. 
3. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.

2. 오버로딩 vs 오버라이딩

오버로딩: 기존에 없는 새로운 메서드를 정의하는 것
오버라이딩: 상속받은 메서드의 내용을 변경하는 것

 

 

출처: 자바의 정석

반응형

무슨 이유인지는 모르겠지만 포트가 이미 실행 중일 때 스프링을 Run 하면 발생한 에러라고 한다..

해결방법
(윈도우)
cmd에서 netstat -ano를 실행 하면 현재 실행중인 포트 목록이 나온다.
여기서 8020포트에 해당하는 PID를 찾아서
taskkill/pid 0000 / f 
을 입력한다.

반응형

1. JPA는 Java Persistance Api다.
영속성은 데이터가 영구히 기록될 수 있도록 하는 것이다. 
JPA는 즉 자바에 있는 데이터를 영구히 기록할 수 있느 환경을 제공하는 API다. 

2. JPA는 ORM 기술이다.
ORM(Object Relational Mapping): Object를 DB에 연결하는 방법론,
자바 클래스를 만들어서 실행하면 DB에 테이블을 자동적으로 생성시킬 수 있다.

3. JPA는 반복적인 CRUD 작업을 생략하게 해준다.
기존 : 자바 프로그램이 DB에 커넥션을 요청 -> DB는 세션을 오픈 -> 오픈된 세션으로 자바 프로그램은 connection을 가짐 -> 다음 요청시에는 쿼리를 전송할 수 있음 -> DB는 쿼리를 기반으로 데이터를 만들고 자바에 응답 -> 응답한 데이터 타입과 자바의 데이터 타입이 다르므로 자바는 해당 데이터를 자바 object로 변경

하지만 JPA 사용하면 전송된 쿼리에 대한 응답이 있을때 응답을 자바 오브젝트로 바꾸고 연결된 세션, 커넥션을 끊는 일련의 작업을 단순한 함수로 제공해준다. 

반응형
필터

스프링컨테이너가 들고 있는 필터를 '인터셉터'라고 부른다.
인터셉터 또한 권한을 체크한다.

어노테이션 & 리플렉션

어노테이션
어노테이션은 사전뜻대로는 주석이지만 스프링에서 어노테이션은 컴파일러가 무시하지 않고 체킹을 한다.
스프링은 어노테이션으로 객체를 생성하기도 한다. 
ex)
@Component: 해당 어노테이션이 붙어있는 클래스를 메모리에 로딩해
                         특정 클래스에 해당 어노테이션이 붙어있으면 스프링은 그 클래스를 스캔해서 
                         자기가 들고있는 메모리공간(heap영역, 컨테이너)에 로드한다. => IOC
@Autowired: 스프링 컨테이너에  있는 클래스를 사용하고 싶을 때사용

리플렉션
 - 스프링이 B클래스를 스캔할 때 B클래스 내부에 어떤 것들이 있는지 분석하는 기법을 리플랙션이라 한다.
 - 리플랙션은 어떤 메서드, 필드, 어노테이션이 있는지를 체킹한다.
   또한 있는지를 체킹하는것을 넘어서 어떤 동작을 할지를 설정할수도 있다. 
 - 만약 @Autowired 를 발견하면 스프링 컨테이너를 쭉 읽어어서 A랑 동일한 타입의 객체가 있는지를 확인한다.
  만약 A가 없다면 null을 반환, 있다면 A를 DI한다.  
- 리플렉션은 런타임때 동작(분석)한다. 

Class B{
  @Autowired
  A a;
}

 

+ Recent posts