[TIL] 2022-03-02

nathan·2022년 3월 2일
0

TIL

목록 보기
27/34

2022-03-02

😍 좋았던 것(Liked)

  • 오늘 시간이 점심밖에 안될 것 같아서 점심을 간단히 먹고 운동을 했다.
  • 평소에 다른 분들은 어떻게 학습을 하나 궁금했는데, 그룹 리뷰 시간에 학습 방법에 대한 주제로 이야기를 했다. (소스코드에 강의 내용 주석으로 적어서 기록하기, 키워드 위주의 정리 등)
  • 어제 TIL에 적은 cheat sheet에 대해 반스가 물어봐줘서 내심 고마웠다.
    • (누군가 읽고 있다고 생각하면 더 신경써서 글을 쓰게 된다.)
    • 나도 종종 반스, 쿠킴, 익조, 짱민.. 등등 블로그를 찾아가서 인사도 남기고 쓴 글도 읽어본다. 각각 글을 쓰는 스타일이 달라서 재밌다!
  • 오늘 호눅스와의 티타임 시간을 가진 것
    • htop을 통해 내 컴퓨터의 상태를 알 수 있었다.
    • 개발 관련 도서 뿐만 아니라 비 개발 도서도 읽자.(시간이 된다면) - 면접 때 물어보기도 한다.
    • SQL도 많이 따라쳐야 실력이 향상된다.(컨버터 같은거 이용하지 말고 본인이 다 작성해보자)
    • 추후 토이 프로젝트를 많이 해보면서 실력을 쌓자.(본인이 관심있는 것을 하면 더욱 좋다.)
    • 모든 것은 마음먹기에 따라 다르다.(성실함과 꾸준함이 실력을 향상 시킨다.)

📚 배운 것(Learned)

  • 라이브러리 vs. 프레임워크
  • 스프링 IoC, 컨테이너, DI에 대해 훑었다.
    • 프레임워크가 내 코드를 대신 호출해준다는 점에서 제어의 역전(Inversion of Control)이라고 한다.
    • 두가지 종류의 의존관계 (의존관계를 분리해서 생각할 수 있어야 한다.)
        1. 정적인 클래스 의존관계
        • 클래스 다이어그램으로 표현된다.
        • 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다.
        • 정적인 의존 관계는 애플리케이션을 실행하지 않아도 분석이 가능하다.
        1. 실행 시점에 결정되는 동적인 객체(인스턴스) 의존관계
        • 객체 다이어그램으로 표현된다.
        • 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계이다.
        • 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존 관계가 연결되는 것을 의존관계 주입(DI)이라고 한다.
        • 의존관계 주입(DI)을 통해 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
    • AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라고 한다.
      • IoC 컨테이너는 범용적으로 쓰인다.(ex. JUnit도 IoC 컨테이너이다.)
      • 요즘은 의존관계 주입에 초점을 맞춰DI 컨테이너를 자주 사용한다고 한다.
      • 부품들을 조립한다는 의미에서 어셈블러 또는 오브젝트 컨트롤러라고 부르기도 한다.
  • 스프링 컨테이너스프링 빈에 대해서 학습했다.
    • 스프링 컨테이너에 등록하기
      • 스프링 컨테이너는 @Configuration 어노테이션이 붙은 AppConfig를 설정(구성) 정보로 사용한다.
      • 각 메서드에는 @Bean 어노테이션을 붙여 스프링 컨테이너에 등록한다.
      • 이 때 스프링 컨테이너에 {Bean 이름(key) = Bean 객체(value)} 로 저장이 된다.
    • 스프링 컨테이너를 이용하면 아직까지는 코드만 복잡해지는 느낌이 든다.
      • 스프링 컨테이너가 해주는 기능이 엄청 많다고 한다. (차차 학습 예정)
    • 스프링 컨테이너는 설정정보(AppConfig)를 참고하여 의존관계를 주입(DI)한다.
      • 단순 자바코드를 호출하는 것 같이 보이나, 차이가 존재한다.(싱글톤 컨테이너 학습할 때 알아보자)
    • 스프링 Bean 조회 방법
      • getBean(빈 이름, 타입), getBean(타입)
      • 이 때 타입에는 인터페이스를 넣었을 때 자동으로 해당 인터페이스의 구현체가 조회된다.(신기)
      • 따라서 구현체를 넣기보다는 인터페이스를 넣는 것이 바람직하다.(why? 역할과 구현의 구분 & 역할에 의존)
    • 스프링 Bean 조회의 기본 대 원칙 : 부모 타입으로 조회시, 자식 타입도 함께 조회된다.
    • 실제 개발시엔 getBean을 통해 조회할 일이 거의 없다.(스프링 컨테이너가 자동으로 의존관계를 주입해주는 것을 사용하기 때문)
      • 그럼에도 배우는 이유 : 기본 기능이기도 하고, 가끔 순수한 자바 애플리케이션에서 스프링 컨테이너를 생성해서 써야할 일이 있는데, 그럴 때 사용하게 된다.
    • BeanFactory : 스프링 컨테이너의 최상위 인터페이스(getBean 제공)
    • ApplicationContext(자주 사용) : Bean Factory 기능을 모두 상속받아 제공한다. + 부가 기능 제공
    • BeanFactory, ApplicationContext 모두 스프링 컨테이너라고 한다.
  • 테스트는 항상 실패 테스트도 만들자.
    • JUnitAssertions.assertThrows(예외.class, () -> 실행코드)를 이용해보자.

💦 부족했던 것(Lacked)

  • 생각보다 헛짓거리를 많이 했다.. 공부에 집중할 수 있는 환경을 만들어야겠다..(ex. 캠을 자주 켜기)
  • 강의를 생각보다 많이 못들었다. 그래도 TIL은 꾸준히 쓰면서 정리가 되는 느낌이다. But 가독성이 너무 떨어지는 듯하다. (개선이 필요할듯..)
  • 내일 조기축구를 하기 위한 빠른 취침..은 핑계고, 독서를 못했다.. 내일은 꼭 읽자!!!

🕯 바라는 것(Longed for)

  • 오류 메시지를 바라보는 방식 개선
  • 운동을 꾸준히!
  • 개구리책 읽기!

앞으로 공부의 방향성. (feat. 초보 개발자)

  • 오늘 다음 링크의 글들을 읽고 내 프로그래밍 학습 방식을 많이 개선해야겠다는 생각을 했다.

  • 여기 글에 나온 예시처럼 나는 오류를 그대로 긁어서 구글링하는 방법으로 학습했다.

  • 이는 결국 근본적인 원인에 대한 궁금증, 그것에 대한 정보 습득이 없는 그야 말로 임시방편 암기였다.

  • 다음의 문장을 새기며 오늘을 마무리한다.

    프로그래밍 과정에서 발생하는 오류 메시지는 복사해서 검색을 하라고 나오는 것이 아니라 읽고 원인에 대해 생각하라고 제공되는 것

profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글