스프링/입문 6

다형성

>좋은 객체 지향 프로그래밍 객체 지향의 특징은 추상화, 캡슐화, 상속, 다형성 등이 있음. *객체 지향 프로그래밍- 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들 의 모임으로 파악. 각각의 객체는 협력해서 메시지를 주고받고, 데이터를 처리할 수 있다. - 프로그램을 유연하고 변경이 용이하게 만듦(컴포넌트를 쉽고 유연하게 변경하며 개발할 수 있는 방법 ) -> 대규모 소프트웨어 개발에 많이 사용한다. 유연하고 변경이 용이하게 하는 객체지향의 핵심 => "다형성" >다형성(Polymorphism) EX1)실세계에 비유해보면 역할(인터페이스)과 구현(인터페이스 구현한 객체)으로 구분, 어떤 사람이 자동차를 사려고 할 때 자동차 역할을 구현한게 차 기종, 운전..

스프링/입문 2022.09.04

스프링이란?

스프링이란, >스프링 생태계 스프링은 여러 기술들의 모음. 스프링의 핵심인 스프링 프레임 워크 + 여러 스프링 기술을 편리하게 사용할 수 있게 해주는 스프링 부트 + DB를 편리하게 사용 도와주는 스프링 데이터 + 세션 기능 편리하게 사용할 수 있게 하는 스프링 세션 + 보안관련 스프링 시큐리디 + API 문서화를 편리하게 해주는 스프링 Rest Docs + 배치 처리에 특화된 스프링 배치 + 클라우드 특화된 스프링 클라우드 +.... 이외에 많은 기술 -> https://spring.io/projects 여기서 확인 가능. *스프링 프레임 워크(가장 중요) -핵심 기술(모든 라이브러리들이 활용하는 스프링의 가장 핵심) : 스프링 DI 컨테이너, AOP, 이벤트, 기타 🟡 -웹 기술 : 스프링 MVC, ..

스프링/입문 2022.09.04

AOP

AOP 모든 메소드의 호출 시간을 측정하고 싶다면? *공통 관심사항(cross-cutting concern) / 핵심 관심 사항(core concern)* 모든 함수마다 try catch를 이용해 함수 끝난 시간 - 함수 시작 시간을 해서 시간 측정하는 로직을 적용하면 가능. 하지만 이 방법을 사용하면 모든 함수에 각각 시간 측정 로직을 붙여줌. -함수의 수가 많으면 다 적기 힘듦. -시간 측정 기능은 핵심 관심사항(핵심 로직)이 아님. 공통 관심사항(공통적으로 여러 메소드에 필요한 기능). -시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움. 코드가 섞여있어서 -시간 측정 로직을 별도의 공통 로직으로 만들기도 어려움. -로직 변경시 모든 로직을 찾아 변경해야 하기에 함수가 많아지면 힘듦. ..

스프링/입문 2022.09.04

스프링 컨테이너와 스프링 빈 (3)

>다양한 설정 형식 지원 -자바, XML 스프링 컨테이너는 다양한 설정 정보 받아들일 수 있게 유연하게 설계되어 있음. 자바/XML/groovy 등.. ApplicationContext를 구현한 1). 2). 3) 1-AnnotationConfig를 설정정보로 사용하는 appConfig.class, 최근 많이 사용. new로 새성하여 appConfig.class 넣어줌. 2-자바가 아닌 xml이라는 문서를 설정 정보로 사용. 임의로 구현해 사용 가능.과거에 많이 사용. 3-어떤 걸 생성시(ex-xxx 타입) xxx타입으로 생성 -최근에는 스프링 부트 사용을 많이 하여 xml기반 설정은 잘 사용 X.그러나 아직 많은 레거시 프로젝트들이 XML로 되어있고 컴파일 과정이 없어 xml파일을 교체하여 설정 변경 ..

스프링/입문 2022.09.04

스프링 컨테이너와 스프링 빈 (2)

>빈 조회 방법 //기본 기능인데 잘 사용은 안함. 1)getBean()이용. getBean((빈이름,)타입); -타입으로만 조회 시 같은 타입 나올 때 어려움. 조회 대상 스프링 빈이 없으면 예외 발생 NoSuchBeanDefinitionException @Test @DisplayName("빈 이름으로 조회X") void findBeanByNameX() { //ac.getBean("xxxxx", MemberService.class); Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class)); } //검증 과정이 복잡. +)람다식 해석: () -> ac.getBean(..

스프링/입문 2022.09.04

스프링 컨테이너와 스프링 빈 (1)

*스프링 컨테이너가 어떻게 생성될까? AnnotationConfigApplicationContext객체 생성 시 AppConfig.class를 파라미터로 넘기고, applicationContext가 반환되었었다. ApplicationContext ->스프링 컨테이너/인터페이스(다형성이 적용 되어있음. 이를 구현한 것 중 하나가 AnnotationConfigApplicationContext(annotationConfig 기반 스프링)이다.). -스프링은 XML기반(잘 사용 X) / Annotation기반(편리해서 많이 사용) 자바 설정 클래스로 만들 수 O. -> new로 생성하고 appconfig를 파라미터로 넣어줌. //스프링 컨테이너 생성 ApplicationContext applicationCont..

스프링/입문 2022.09.04