전체 글196 6장. 함수형 프로그래밍 함수형 프로그래밍의 핵심 함수형 프로그램과 일반적인 자바 프로그램의 핵심 차이는 변수의 가변성이다. 자바 프로그램은 가변 변수를 사용하며, 가변 변수는 프로그램 실행 중에 상태가 변할 수 있다. 반면 함수형 프로그램(책에서는 클로저 프로그램을 예시로 들었다)은 가변 변수가 없다. 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 변수가 가변적이고 불변적인 것이 왜 중요한가? 이유는 대부분의 동시성 문제가 가변적인 변수로 인해 발생하기 때문이다. 레이스 컨디션, 데드락 상태, 데이터베이스 동시 업데이트의 문제는 모두 가변 변수로 인해 발생한다. 어떠한 변수도 갱신되지 않으면 레이스 컨디션, 데이터베이스 동시 업데이트 문제가 발생하지 않는다. 두 문제의 공통점은 하나의 값을 여러 대상이 동시에 바꾸.. 2023. 11. 9. 06. 다양한 연관관계 매핑 연관관계 매핑시 고려할 점 다중성 두 엔티티가 일대일 관계인지 일대다 관계인지의 다중성을 고려해야 한다. 단방향, 양방향 두 엔티티 중 한쪽만 참조하는 단방향 관계인지 서로 참조하는 양방향 관계인지 고려해야 한다. 연관관계의 주인 양방향 관계면 연관관계의 주인을 정해야 한다. - 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) : 실무에서 거의 사용하지 않는다. - 단방향, 양방향 객체 관계에서 한 쪽만 참조하는 것을 단방향, 양쪽이 서로 참조하는 것을 양방향이라 한다. A 엔티티와 B 엔티티가 연관관계를 맺는다 할 때, A의 필드에만 B가 있고 B에는 A가 없다면 단방향이다. 서로의 필드에 서로가 있다면 양방향이다. - 연관관계의.. 2023. 11. 6. Pull Request 007 - 자유게시글 작성 기능 TDD로 구현해보기 - @SpringBootTest 제거하기 이전에 작성했던 테스트에서는 Service 계층을 테스트하기 위해 @SpringBootTest 애너테이션을 사용했다. @SpringBootTest애너테이션을 사용해도 우리가 원하는 테스트는 가능하다. 필요한 Bean들이 Spring Container에 생성되어 적절히 주입되고, 기능을 올바르게 테스트 해볼 수 있다. 그러나 Bean이 생성된다는 데에서 문제가 생긴다. 테스트는 F.I.R.S.T원칙을 지키도록 작성해야 한다. 그러나 Bean을 모두 생성하는 것은 첫 번째 원칙인 Fast에 어긋난다. Service 계층만 테스트하고 싶은데, 불필요하게 Repository나 Controller계층의 객체들까지 생성하기 때문에 당연히 시간이 오래 걸린다. 따라서 @SpringBootTest 애너테이션을 제거하고.. 2023. 11. 1. Pull Request 006 - 자유게시글 작성 기능 TDD로 구현해보기 - 게시글 저장 이전 글에서 dto -> entity 변환 로직의 테스트를 작성하고 기능을 구현해보았다. 이번에는 데이터베이스에 저장이 잘 되는지를 테스트해보고자 한다. 시작에 앞서 Board객체를 전부 FreeBoard로 수정했음을 미리 알린다. 자유 게시판이라는 형식에 맞춰 이름을 바꿔줬다. 게시판은 자유 게시판 이외에도 리뷰 게시판과 구인구직 게시판이 있는데, 해당 게시판들마다 조금씩 다른 차이를 두고 있기에 크게 게시판으로 추상화하고 서로 다른 이름을 붙여 사용하고자 한다. 구인구직 게시판은 '글머리'가 붙는다. 구인 또는 구직을 나눠야 하기 때문이다. 리뷰 게시판은 게시글 내용에 '해당 샵의 정보'가 들어간다. 어느 샵을 리뷰하는지를 게시글을 보는 순간 쉽게 파악하기 위해서다. 이번에 테스트 해 볼 기능은 '게.. 2023. 11. 1. 5장. 객체지향 프로그래밍 그래서 객체지향이 뭔데? 사실 나도 여기에 명확하게 대답하기가 어렵다. 객체지향 프로그래밍이 뭐냐고 물어보면, 하나의 덩어리로 된 큰 프로그램을 여러 '객체'라는 단위로 나눠서 그 객체들 간 상호작용을 통해 프로그램이 돌아가도록 프로그래밍하는 방식이라고 대답할 수는 있겠는데. 해당 장에서는 객체지향 프로그래밍의 4요소 중 캡슐화, 상속, 다형성을 살펴보며 객체지향이 무엇인지에 대해 대답하고자 한다. 캡슐화? 객체지향을 정의하는 요소 중 하나로 캡슐화를 꼽는 이유는 데이터와 함수를 쉽고 효과적으로 캡슐화하는 방법을 객체지향 언어가 제공하기 때문이다. 이를 통해 데이터와 함수가 응집력 있게 구성된 집단을 서로 구분 짓는 선을 그을 수 있다. 캡슐화가 객체지향 언어에만 국한된 개념은 아니다. C언어에서도 헤더.. 2023. 10. 26. Pull Request 005 - 자유게시글 작성 기능 TDD로 구현해보기 - Post DTO를 Entity로 변경. 첫 삽을 떠보려고 한다. 정의해놓은 여러 요구사항 중 가장 테스트하기 쉬워보이는 자유게시글 작성부터 도전해보기로 했다. 생각해놓은 게시글 작성 기능의 로직은 다음과 같다. 게시글 작성 기능은 BoardServicve#createBoard(BoardDto.Post postDto) 메서드로 정의한다. post dto를 Board 객체로 변환한다. 이 때, 제목과 내용이 작성되어있는지 검증한다. Board 객체를 데이터베이스에 저장한다. Board객체를 response dto로 변환한다. response dto를 controller에 반환한다. 이 때 response dto를 반환하는 이유는 글을 작성한 시점에서 해당 게시글로 이동해서 자신의 게시글을 확인할 수 있게 하기 위해서이다. 여기서 테스트 해볼 수 .. 2023. 10. 25. 이전 1 ··· 10 11 12 13 14 15 16 ··· 33 다음 반응형