[우아한테크코스] 4월 16일 TIL

1 minute read

오늘 배운 것

  1. spring
  2. 스터디

스프링 빈과 컨테이너

컨테이너에 빈을 저장해놓고 저장해둔 빈을 사용한다
bean, pojo, dto

Spring MVC

Spring JDBC

client <-> spring MVC, spring JDBC <-> DB
spring core
사용방법(문서) -> 실습 -> 내부 동작(문서)
데이터베이스에 접근하도록 도와주는 java api
실체 구현체인 driver(mysql과 같은)가 db에 접근
내가 직접 연결했던 때와 달리 spring jdbc를 활용하면 jdbc가 connection 관련 부분을 담당해줘서 연결 설정, 쿼리 작성, 파라미터 넣기만 해주면 되므로 간단해진다.

  • h2란? 내장형 db로 따로 설치할 필요가 없어 스프링 샘플 프로젝트나 테스트에서 활용도가 높음
    AutoConfiguration을 통해 DataSource와 JdbcTemplate을 별도로 등록하지 않고도 사용할 수 있다.

  • 실습

공부할 것

스프링 빈, 스프링 mvc, 스프링 jdbc에 대해서
http protocol-> 그림으로 배우는 http&network basic, http 완벽 가이드

스터디 - 모던 자바 인 액션

  1. 함수형 관점으로 생각하기
    응집성 높고 결합성 낮은 프로그래밍 하기
    • 공유된 가변 데이터
      다른 클래스나 객체의 상태를 바꾸지 않는 것이 순수 메서드
      공유된 가변 데이터의 부작용: setter, 메서드 실행 중 예외, I/O 동작 수행
  • 선언형 프로그래밍
    어떻게 수행할 것인가? 명령형(절차지향, 객체지향)
    무엇을 수행할 것인가? 선언형(함수형): 람다식

함수형 + 순수 메서드: 시스템 유지보수가 쉬워짐

함수형에서의 함수는 0개 이상의 인수, 한개 이상의 결과 반환
순수 함수형: int sum(a, b)와 같은 함수
함수형: 시스템 다른 부분에 영향을 미치지 않는 함수

자바에서는 I/O 모델 자체에 부작용 메서드가 있어서 순수 함수형이 되기 어렵다.

  • 메서드 바디에 lock을 걸어서 병렬로 호출하지 못하도록 해서 부작용을 없앨 수 있다. 하지만 속도가 느림
    1. 함수나 메서드는 지역 변수만을 변경해야 하며, 함수나 메서드에서 참조하는 객체는 불변이어야 한다.
    2. 함수나 메서드가 어떤 예외도 일으키지 않아야 한다.(optional 사용)
    3. 함수형에서는 비함수형 동작을 감출 수 있는 상황에서만 부작용을 포함하는 라이브러리 함수를 사용해야 한다.(자료구조 복사)
      참조 투명성: 함수에 같은 인수르 넣었을 때 항상 같은 결과 반환
      자료구조가 같은데 참조가 다르고, 데이터가 같다면 같은 객체로 본다.
      자바 프로그래머는 익스트림 객체지향 + 함수형 적절한 사용
      변화를 알아차리지 못한다면 반복문을 실행할 수 있다. 하지만 반복은 변화가 예상되므로 재귀를 사용하는 것을 지향한다.
      재귀는 자원을 더 많이 사용하기 때문에 무조건 재귀가 더 좋다고 할 수 없다. 이를 방지하기 위해 꼬리 재귀 최적화를 사용하기도 하지만 자바는 지원하지 않는다.


  1. 함수형 프로그래밍 기법
    • 일급 함수: 일반 값처럼 취급할 수 있는 함수
    • 고차원 함수
  • 커링: 함수를 모듈화하고 코드를 재사용할 수 있는 것
    인자를 여러개 받는 것을 분리해서 인자를 하나씩 받는 함수의 체인으로 바꾸는 것
  • 영속 자료구조: 자료구조를 통째로 복사하는 낭비를 줄이기 위한 것

  • 스트림과 게으른 평가