항해 2주차 회고록

2주차를 마치며

1.IoC, DI, Bean
2.주특기 시작과정에서 배운 것, 느낀점

1.IoC (Inversion of Control)

"제어의 역전" 이라는 의미로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

ex)생성자를 사용해 틀을 만들고 외부의 정보를 주입시켜 객체를 생성

레퍼지토리를 이용하여 생성자에 넣는 것이 IoC

public class LogService {

    private final LogRepository logRepository;
    
    public LogService(LogRepository logRepository) {
    	this.logRepository = logRepository;
    }
    

    @Transactional
    public Long update(Long id, LogRequestDto requestDto){
        Log log = logRepository.findById(id).orElseThrow(
                () -> new NullPointerException("아이디를 찾을 수 없습니다.")
        );
        log.update(requestDto);
        return id;
    }

.DI(Dependency Injection)

"의존성 주입"이라는 말로 IoC가 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법으로서 Java에서는 일반적으로 인터페이스를 이용해서 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 한다. 유연함이 클수록 에러는 적다

ex)
강한 결합 (m1을 직접 생성)

public static void memberUse1(){
	Member m1 = new Member();
}

약한결합 (생성된 것을 주입 받음 - 의존주입(DI))

public static void memberUse2(Member m) {
	Member m2 = m;
}

Member를 사용한다 --> Member의 기능에 의존한다 라는 의미

class Member{
	String name;
    int age;
    String address;  
}

.Bean

Spring IoC 컨테이너가 관리하는 자바 객체를 Bean이라고 부른다.

ex)
스프링 Bean을 IoC Container에 등록하기 위해 Controller Annotation 을 붙여준다

@Controller
public class HelloController {
    // Http Get method 의 /hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이 @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "This is data!!");
        return "hello";
    }
}

Controller Annotation 의 소스
@Component Annotation 으로 인하여 Spring은 해당 Controller를 Bean 으로 등록한다.


// -- 일부 생략 --
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 */
	@AliasFor(annotation = Component.class)
	String value() default "";

}

2.주특기 시작과정에서 배운것, 느낀점

배운 것

  • Java Spring의 기본 구조, 개념등을 정리
  • 서버와 클라이언트 사이의 요소들을 정리
  • 서비스를 배포하는 법
  • Spring만의 API사용법

느낀점

  • 강의는 곧 잘 따라가고 있다고 생각하고 배운 것들을 잘 쓰고 있다고 생각한다. 하지만 비전공자이기 때문에 개념용어에 관해 많이 약해서 그 쪽 부분을 더 보완해야겠다.

좋은 웹페이지 즐겨찾기