1. Report

https://www.notion.so/springboot-46aac7a13b3241eda52a6f873846febe

Spring의 핵심 3가지 IoC, AOP, PSA

Ioc(Inversion of Control) - 제어역전

[일반적인 의존성에 대한 제어권]

class OwnerController {
	private OwnerRepository repository = new OwnerRepository();
}

 

  • 쓸 생성자를 class안에서 직접 만들어서 사용
  • 의존성을 자기 자신이 관리

 

[IoC 제어역전에 의한 의존성 주입]

class OwnerController {
	private OwnerRepository repo;

	public OwnerController(OwnerRepository repo) {
		this.repo = repo;
	}
}

class OwnerControllerTest {
	@Test
	public void create() {
		OwnerRepository repo = new OwnerRepository();
		OwnerController = new OwnerController(repo)
	}
}

 

  • Controller는 밖에서 repo를 만들어서 줄것이다 생각하고 코드 작성 후 사용하는 곳(ex:OwnerControllerTest) 에서 만들어서 주입
  • 의존성을 밖에서 관리
  • test하기 용이

이런 IoC가 가능하게 해주는 것 = IoC컨테이너

 

IoC 컨테이너

  • 가장 핵심적인 인터페이스 = ApplicationContext (BeanFactory)

 

Bean이란?

 

bean을 쓰는 법

  • @Autowired 또는 @injection
  • ApplicationContext에서 getBean()으로 직접 꺼낸다.

 

의존성 주입(Dependency Injection)

  • bean이 되는 class에 생성자가 하나만 있고 그 생성자의 매개변수 type이 bean에 등록되어 있다면 @Autowired 없이 자동 주입 됨.
  • @Autowired / @Injection은 생성자, 필드, setter 에 붙힌다. ( 생성자 > setter > 필드 가 더 좋음)

 

AOP ( Abstract Oriented Programming )

  • 관점지향 프로그래밍
  • 흩어진 코드를 한 곳으로 모으자

[본래 코드]

class A {
	method a {
		AAAA
		지금은 스프링 부트 입문 공부 중.
		BBBB
	}
	
	method b {
		AAAA
		집중하기 힘들다.
		BBBB
	}

	method c {
		AAAA
		스프링 부트를 마스터하자 아자아자!
		BBBB
	}
}

 

[AOP 적용 후]

class A {
	method a {
		지금은 스프링 부트 입문 공부 중.
	}
	
	method b {
		집중하기 힘들다.
	}

	method c {
		스프링 부트를 마스터하자 아자아자!
	}
}

// 프록시 패턴 사용
class AProxy extends A {
	
}

class AAAABBBB {
	method aaaabbbb(JoinPorint point) {
		AAAA
		point.exeute()
		BBBB
	}
}

AOP를 구현하는 방법

  • byte코드를 조작: 이미 컴파일 된 메소드에 껴놓기
  • 프록시 패턴: A를 상속 받아서 a → Spring AOP는 프록시 패턴 사용

 

ex) 어노테이션을 이용해 AOP구현

1) 어노테이션을 만들어준다

 

2) 어노테이션 기능을 구현한다.

 

3.어노테이션으로 만든 기능을 넣고 싶은 곳에 어노테이션을 붙힌다.

 

4.결과

 

PSA

  • 잘 만든 인터페이스
  • spring의 대부분의 기능들이 추상화 인터페이스로 만들어져있다( mvc, transaction, cache 등)
  • 각각의 기능들을 구현할때 세부 기능들을 여러가지 기법으로 구현해놓고 내가 쓰고싶은거에 맞춰서 쓸 수 있음 (대표적인 추상화 기법)

 


Review

Spring에서 아무것도 모르는 사람이 정말 입문용으로 듣기 좋은 강의는 아니다.

현업에서 Spring을 이용해서 일을 해봤지만 Spring을 제대로 이해하지 못하는 것 같을 때 정리하기 좋은 강의이다.

이 강의는 springboot에서 springclinic이라는 프로젝트를 이용해 진행하고 내용에 대해 깊게 들어가진 않는다.

개념만 주구장창 이해한다고해도 금방 까먹기때문에 한번 springboot을 이용해 프로젝트를 만들어 본 후 다시

이 내용을 깊게 정리하면 좋을 것 같다.

BELATED ARTICLES

more