TIL 27

의존관계 주입(DI)

의존관계 주입!! 이해라도 해보자!!!!  의존관계 주입 방법을 나누면 크게 4가지가 있다. ● 생성자 주입 ●  수정자 주입(setter 주입) ● 필드 주입 ● 일반 메서드 주입  생성자 주입생성자를 통해서 의존 관계를 주입 받는 방법 특징1.생성자 호출시점에 1번만 호출되는 것이 보장된다.2.불변,필수 의존관계에 사용@Componentpublic class OrderServiceImpl implements OrderService {private final MemberRepository memberRepository;private final DiscountPolicy discountPolicy;@Autowiredpublic OrderServiceImpl(MemberRepository memberRep..

TIL 2024.05.27

스프링 컨테이너와 빈

스프링 컨테이너와 스프링빈!!! 이해라도 해보자!!! 스프링 컨테이너 생성//스프링 컨테이너 생성ApplicationContext applicationContext =new AnnotationConfigApplicationContext(AppConfig.class); ApplicatinContext를 스프링 컨테이너라고 한다.ApplicationContext는 인터페이스이다.스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수있다. 스프링 컨테이너 생성 과정new AnootationConfingApllicationContext(AppConfig.class)스프링 컨테이너를 생성할 때 구성 정보를 지정해 주어야한다.위 코드에서는 AppConfig.class를 구..

TIL 2024.05.23

좋은 객체 지향 설계의 5가지 원칙(SOLID)

SOLID 한번 알아보자!! SOLID란? 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙SRP: 단일 책임원리(single responsility principle)OCP: 개방-폐쇄 원칙(Open/colsed principle)LSP: 리스코프 치환 원칙(Liskov substitution principle)ISP: 인터페이스 분리 원칙(Interface segregation principle)DIP: 의존 관계 역전 원칙(Dependency inversion principle)   SRP: 단일 책임원리(single responsility principle)한 클래스는 하나의 책임만 가져야 한다.(문맥과 상황에 따라 다르다)중요한 판단 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 ..

TIL 2024.05.22

스프링 이란

스프링!! 이해라도 해보자!!! 스프링이란?스프링은 특정 기술이 아니라 여러가지 기술의 모음이라고 생각하면 된다.스프링이라는 단어는 맥락에 따라 스프링 DI 컨테이너 기술, 스프링 프레임워크, 스프링 부트 나 프레임워크등을 모두 포함한 스프링 생태계로 사용 될 수있다.  스프링 프레임 워크핵심기술: 스프링 DI 컨테이너, AOP, 이벤트웹기술: 스프링 MVC, 스프링 WebFlux데이터 접근 기술: 트랜잭션,JDBC,ORM지원,XML지원기술 통합: 캐쉬,이메일,원격접근,스케줄링테스트: 스프링 기반 테스트 지원언어: 코틀린, 그루비 스프링 부트스프링을 편리하게 사용하도록 지원, 대부분 기본으로 사용단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를..

TIL 2024.05.20

정적 컨테츠, MVC, API

정적 컨테츠, MVC , API 이해라도 해보자!!!   드디어 스프링에 입문을 하게 되었다.스프링을 마주한 소감은 아직 생각했던거보다 훨씬 이해가 안된다.자바에서는 클래스와 상속을 이해하였을 때부터 자바에 재미를 붙이고 있어서 스프링을 배우는 것도 즐거울 거 같았다.그런데 아직 잘 모르겠다 자바를 할 때는 구조가 어렵다는 생각은 잘 안들었는데.. 스프링은 아직 실행되는 구조를 잘 모르겠다. 그래서 나의 성격성 구조를 이해하지 못하고 실행이 된다해도 만족 할 수 없기 때문에 가장 간단한 구조부터 하나씩 이해하려 노력하려 한다.정적 컨테츠정적인 콘텐츠 즉, 이미 완성이 되어있는 HTML과 같은 문서를 브라우저로 전달합니다. MVC MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인..

TIL 2024.05.16

팀프로젝트 KPT

Keep - 현재 만족하고 있는 부분팀원 전체가 상대를 존중하는 마인드가 기본값으로 적용되어 있습니다.모르는 부분, 잘 안되는 부분, 프로젝트의 방향성을 꾸준히 소통해가며 전체적인 프로젝트의 퀼리티를 높일 수 있었다.맡은 부분을 어떻게든 열심히 다 해주시는 것이 좋았습니다.자유로운 식사시간수강생 상태를 입력 받는 부분을 NPE 고려해 짤 수 있어서 좋았다.해결할 사항이 있을 때 서로 의견 제시나 공유가 부담없이 잘 되어 좋았습니다.Exception을 따로 던지지 않고, 예외가 일어나는 부분을 따로 case로 빼서 처리하는 부분이 좋았다.수강생 관련 일부 메서드들이 코드 재사용성이 좋아 실제로 재사용을 많이 했습니다.끝까지 포기하지 않고 기능구현에 성공해낸 점Problem - 불편하게 느끼는 부분불편했다기..

TIL 2024.05.13

Enum 이해하기

enum!!! 이해라도 해보자Enumd이 필요한 이유String 타입은 어떤 문자열이든 입력 할 수 있기 때문에 문제가 발생할 상황이 많다.이 문제를 타입 안전성 부족 문제 라고 부른다.1. 값의 제한 부족: String으로 상태나 카테고리를 표현하면 잘못된 문자열을 실수로 입력할 가능성이 있다.(오타)2. 컴파일 시 오류 감지 불가: 이러한 잘못된 값은 컴파일 시에는 감지되지 않고, 런타임에서만 문제가 발견된다(디버깅 어려움)이런 문제를 해결하려면 특정 범위로 값을 제한해야한다.  예를 들어 어떤 머세드에서 String을 변수로 받는다면 어떤 문자열이든 받을 수 있기 때문에 자바 문법 관점에서는 어떤 문제도 없다.Enumd이란타입 안전 열거형 패턴 - Type-Safe Enum Patternenum(e..

TIL 2024.05.09

예외처리하기

예외처리 해보기 예외처리란?개발자가 작성한 코드에서 발생할 수 있는 오류를 사전에 방지하는 것!!! 하지만 아직 이해가 부족하다... 우선 어찌어찌 작성은 했기 때문에 코드를 먼저 올려놓고 해석해보자.  public double cal () { double result = 0; String msg = ""; switch (saChic) { case '+': result = addOperator.operate(n1,n2); break; case '-': result = subtractOperator.operate(num1,num2); ..

TIL 2024.05.01

상속과 오버라이딩(Overriding)

오버라이딩!! 이해라도 해보자!! 필요한 이유부모 타입의 기능을 자식에서는 다르게 재정의 하고 싶을 수 있기 때문!! 오버라이딩이란부모에게서 상속 받은 기능을 자식이 재정의 하는 것을 메서드 오버라이딩(Overriding)이라 한다. 사용방법package extends1.overriding;public class Car {public void move() {System.out.println("차를 이동합니다.");}public void openDoor() {System.out.println("문을 엽니다.");}}부모클래스(Car)package extends1.overriding;public class ElectricCar extends Car {@Overridepublic void move() {Sys..

TIL 2024.04.30

인터페이스

인터페이스!!! 조금이라도 이해해보자!!! 인터페이스자바는 순수 추상 클래스(모든 메서드가 추상인 클래스) 를 더 편리하게 사용 할 수있는 인터페이스라는 기능을 제공한다.● 인터페이스의 메서드는 모두 `public` , `abstract` 이다. -> 굳이 적지않아도 자동으로 적용됨●메서드에 `public abstract` 를 생략할 수 있다. 참고로 생략이 권장된다. ●인터페이스는 다중 구현(다중 상속)을 지원한다. -->  인터페이스의 존재이유 사용방법public interface InterfaceAnimal { void sound(); void move();}public abstract 키워드 생략이 가능하다.인터페이스는 `class` 대신에 `interface` 로 선언하면 된다. `sound()..

TIL 2024.04.29