2024/07/15
스트림과 중첩 클래스
7월 3주 차 월요일 시작!
오늘은 스트림과 중첩 클래스에 대해서 배웠다. Nested Class로 불리는 중첩 클래스는 특정 클래스 내부에 선언하는 클래스로 함수형 프로그래밍의 기초가 된 개념이다.
API를 생성할 때 중첩 인터페이스가 사용된다고 한다.
중첩 클래스 이해가 안 돼서 스터디 끝나고 중첩 클래스에 대해 공부해야겠다.
프로그램을 더 작은 단위로 쪼개고 실행하기 위해 스트림과 이너 클래스, 익명 클래스를 활용할 수 있고 이 기능 덕분에 코드의 복잡성을 줄이고 다형성을 구현할 수 있다는 점이 큰 장점이라는 것을 확인할 수 있었다.
2024/07/16
람다와 스트림
오늘은 테스트 리뷰 및 람다와 스트림을 복습해 보았다.
중첩 클래스와 람다를 배우면서 람다 자체의 식은 어렵지 않다고 느꼈는데 오늘 아무것도 주어지지 않고 람다식으로 적으려니까 한 줄도 쓰지 못했다..
그리고 함수형 프로그래밍을 구현할 때 함수형 인터페이스와 함께 쓰일 때 전달받는 순서가 이해되지 않아 힘들었다.
이런 구조가 잘 안들어오다보니 결국 람다에 대해 100% 이해하지 못하는 일이 생겼다.
스트림도 마찬가지로 자바에서 제공하는 Predicate 함수형 인터페이스에 대해서도 알아보았는데 더 자세히 찾아보고 싶다..
다음 날 수업을 집중해서 듣기 위해 요즘 일찍 자고 있는데 수업은 잘 따라가는데 공부 분량을 못 채워서 이해가 안 가는 문제가 생겼다ㅠ
과정 시작하고 이번 주가 가장 고비인 거 같다.. 데이터베이스 시작하면 다시 복습해야겠다.
2024/07/17
집계, Optional 클래스와 입출력 클래스
오늘은 스트림의 집계 메서드와 자바에서 기본으로 제공하는 함수형 인터페이스 중 가장 유명하고 잘 쓰는 4가지를 살펴보았고 마지막으로 입출력 클래스를 알아보았다.
최근 수업 내용에서 따라가기 힘든 개념을 공부하다 보니 수업 내용에 집중하는 스터디가 필요졌고, 원래 내가 진행하고 있던 스터디와 별개로 다른 스터디 그룹에 들어가 모임을 추진하게 되었다.
오늘로 기초 자바 스터디는 두번째인데 역시 여러 명이서 공부하니까 깊이 있는 공부가 되어서 정말 좋았고 다행이었다.
BufferedWriter를 쓰고 난 뒤 반드시 flush() 메서드를 사용해서 buffer에 남아있는 데이터 요소를 다 흘려보내야 하는 이유에 대해서 토론을 했다.
그 이유로는 여러가지가 있었다.
다수의 사용자가 동시에 접속하는 환경일 경우 (멀티 스레드 환경) 다음 사용자가 전 사용자가 쓴 파일을 읽었을 때 버퍼를 비우지 않으면 데이터가 달라져 일관성이 떨어질 수 있기 때문에 쓰고 난 뒤 남아있는 잔여 데이터를 모두 내보내서 멀티 스레드 환경에서도 일관성을 유지할 수 있도록 한다.
또한 출력 스트림에서 미처 다 내보내지 못한 데이터를 완전히 내보내어 데이터의 손실을 방지하는 목적으로 쓸 수 있었다.
그리고 Optional 클래스를 이용하면 요소가 없는 스트림을 최종 연산할 때를 대비할 수 있다는 점에서 앞으로 스트림을 사용할 때 Optional 클래스의 메서드를 활용해야겠다고 생각했다.
2024/07/18
JSON
오늘은 자바 환경에서의 오브젝트를 JSON 형식으로 파일을 생성하고 생성된 파일에서 JSON을 파싱하여 오브젝트를 생성하는 것을 배웠다.
그리고 구글에서 개발한 오픈 소스로 JSON 객체를 생성할 때 사용하는 GSON도 함께 사용해보았다.
GSON에서 제공하는 기본 라이브러리로 다양한 형태로 GSON 객체를 커스터마이징 할 수 있는 점에서 JSON과 함께 쓰이는 이유를 알 수 있었다.
2024/07/19
시스템 구현
오늘은 사용자로부터 입력받은 게시글을 객체로 생성하여 데이터베이스에 저장하고 데이터베이스로부터 레코드를 파싱 해서 CLI로 출력하는 Board 시스템을 리팩터링 했다.
리팩토링 하기 전 Board 시스템은 예외 처리가 잘 되지 않아 프로그램이 도중에 멈춰버리는 큰 이슈가 있었다.
그리고 데이터베이로부터 데이터를 전달받아 객체로 만들고 각 기능 설계에 따라 객체를 처리할 때 사용하는 메서드들이 정리가 되지 않은 부분이 보였었다.
오늘 하루는 이 Board 시스템을 리팩터링 하는데 모든 시간을 보냈다.
시스템 구조를 완전히 갈아엎었는데, 가장 큰 구조적 차이는 service 패키지를 생성한 점이다.
데이터베이스와 직접 연결을 시도하고 쿼리문을 실행하는 커넥션 객체들을 통해 데이터를 가져오거나, 데이터베이스에 입력할 데이터를 전달하는 메서드를 담고 있는 ServiceImpl 클래스를 생성했다.
ServiceImpl 클래스가 가지고 있는 메서드를 정의하는 Service 인터페이스를 생성하여 ServiceImpl에서 재정의하는 방식으로 구현했다.
'주간 랩업 > [SSG] JAVA 기반 백엔드 개발 과정' 카테고리의 다른 글
[9주차] 데이터베이스 11 -15일차 (0) | 2024.08.10 |
---|---|
[7주차] 데이터베이스 1 - 5일차 (0) | 2024.07.27 |
[5주차] 자바 고급 1일 - 4일 (0) | 2024.07.12 |
[4주차] 자바 베이직 14일 - 18일 (0) | 2024.07.08 |
[3주차] 자바 베이직 9일차 - 13일차 (0) | 2024.06.29 |