[우아한테크코스] 4월 16일 TIL
오늘 배운 것
- spring
- 스터디
스프링 빈과 컨테이너
컨테이너에 빈을 저장해놓고 저장해둔 빈을 사용한다
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 완벽 가이드
스터디 - 모던 자바 인 액션
- 함수형 관점으로 생각하기
응집성 높고 결합성 낮은 프로그래밍 하기- 공유된 가변 데이터
다른 클래스나 객체의 상태를 바꾸지 않는 것이 순수 메서드
공유된 가변 데이터의 부작용: setter, 메서드 실행 중 예외, I/O 동작 수행
- 공유된 가변 데이터
- 선언형 프로그래밍
어떻게 수행할 것인가? 명령형(절차지향, 객체지향)
무엇을 수행할 것인가? 선언형(함수형): 람다식
함수형 + 순수 메서드: 시스템 유지보수가 쉬워짐
함수형에서의 함수는 0개 이상의 인수, 한개 이상의 결과 반환
순수 함수형: int sum(a, b)와 같은 함수
함수형: 시스템 다른 부분에 영향을 미치지 않는 함수
자바에서는 I/O 모델 자체에 부작용 메서드가 있어서 순수 함수형이 되기 어렵다.
- 메서드 바디에 lock을 걸어서 병렬로 호출하지 못하도록 해서 부작용을 없앨 수 있다. 하지만 속도가 느림
- 함수나 메서드는 지역 변수만을 변경해야 하며, 함수나 메서드에서 참조하는 객체는 불변이어야 한다.
- 함수나 메서드가 어떤 예외도 일으키지 않아야 한다.(optional 사용)
- 함수형에서는 비함수형 동작을 감출 수 있는 상황에서만 부작용을 포함하는 라이브러리 함수를 사용해야 한다.(자료구조 복사)
참조 투명성: 함수에 같은 인수르 넣었을 때 항상 같은 결과 반환
자료구조가 같은데 참조가 다르고, 데이터가 같다면 같은 객체로 본다.
자바 프로그래머는 익스트림 객체지향 + 함수형 적절한 사용
변화를 알아차리지 못한다면 반복문을 실행할 수 있다. 하지만 반복은 변화가 예상되므로 재귀를 사용하는 것을 지향한다.
재귀는 자원을 더 많이 사용하기 때문에 무조건 재귀가 더 좋다고 할 수 없다. 이를 방지하기 위해 꼬리 재귀 최적화를 사용하기도 하지만 자바는 지원하지 않는다.
- 함수형 프로그래밍 기법
- 일급 함수: 일반 값처럼 취급할 수 있는 함수
- 고차원 함수
- 커링: 함수를 모듈화하고 코드를 재사용할 수 있는 것
인자를 여러개 받는 것을 분리해서 인자를 하나씩 받는 함수의 체인으로 바꾸는 것 -
영속 자료구조: 자료구조를 통째로 복사하는 낭비를 줄이기 위한 것
- 스트림과 게으른 평가