객체지향13 [Effective kotlin] 아이템 27. 변화로부터 코드를 보호하려면 추상화를 사용하라 자바를 공부하며 객체지향을 제대로 공부하기 시작했고, 객체지향의 4대 특성 중 '추상화'의 참된 의미를 알기까지 시간이 걸렸다. 결론은 많이 공부하고 생각하며 확장하고 적용해 봐야 그 의미를 비로소 이해하리라 생각한다. 상수 const val NAME_PREFIX = "prefix" fun getName() : String = NAME_PREFIX + this.name 가장 간단한 추상화 방법이다. 본 코드에서 String 리터럴 값을 따로 빼서 상수화를 시키면 이해도 쉬울 뿐 아니라. 변경하기도 훨씬 수월하다. 리터럴 값에 의미 있는 이름을 붙일 수 있고, 변경이 쉽다. 함수 특정 행위를 함수로 선언하면, 재사용이 가능하다. 코틀린에서는 간단히 확장 함수를 만들어서 여러 곳에서 재사용할 수 있어, 추상.. 2023. 1. 29. [감상문] 도메인 주도 설계 철저 입문을 읽고 나서 이 책을 읽은 이유는 참 웃프다. 사야 할 책을 착각했다.. ㅎㅎ 착각하고 잘못 구매한 책이다. 당근러에게 구매한 책이라 환불은 어렵고 다시 물어보기 귀찮아서 그냥 읽기로 했다. 코드가 C# 언어로 작성되어 있고, 저자도 일본 사람이라서 안 읽힐 것 같았다. 대충 보다가 안 읽히면 당근에 판매하려고 했었다. 다행히 C#을 좀 해서 그런지 (예제 코드가 그렇게 어렵지 않았다) 그럭저럭 이해해가며 완독했다. 도메인 주도 설계니 계층형 아키텍처, 클린 아키텍처니 설명하는 개념들은 다 오가다가 배우고 봐왔던 코드 구성이 짬짬이 있었다. 그땐 그렇게 써야 되나 보다 하고 앵무새처럼 외워서 썼던 기억이 있다. 프로젝트를 시작하며 이해가 뒷받침되지 못한 틀을 깨고 그냥 정석대로 코드 작성을 했었.. 2022. 11. 27. [회고] 클린 아키텍처 책 스터디 및 미니 프로젝트를 마치며 최근 신입 개발자로의 여정을 시작하기 위해 채용 연계형 인턴십, 신입 공채를 보고 확인하며 서류 지원을 하고 있다. 여전히 할 일은 산더미지만, 조금 더 시간을 효율적으로 써가며 발전하고 싶기에 읽고 싶었던 책을 가지고 스터디를 하면 어떨까라는 생각을 했었다. 마침 같은 여정 길에 올라있는 친구가 떠올랐고, 제안을 수락하여 만들면서 배우는 클린 아키텍처라는 책을 가지고 2주 간의 스터디를 마쳤다. 이 책을 읽고 소프트웨어의 설계적 고민에 한층 더 깊이 빠지게 됨과 동시에 새로운 세상으로의 발을 디딘 느낌이 들었다. 설계 내용은 평소에 가장 많이 고민했던 부분인지라 책이 이해가 잘 되었었고, 애매했던 부분을 2회독, 다른 관점으로 읽어보려 3 회독하며 완독을 했다. 주관적이지만 개발 공부를 하며 드는 생각.. 2022. 11. 20. 2022.05.16 「리팩토링」 프로젝트를 진행 중이다. 제대로 신경 써서 하다 보니 너무 오래 걸리는 것 같다. 또 제대로 짰다고 생각한 코드도 리팩터링 할 영역 투성이다. 이러면서 실력이 느는 거겠지..? 진짜 제대로 된 프로젝트 한번 만들어보자 리팩토링 목록 불변 객체 이슈 => setter를 허용한 객체 문제 : 불변성을 띄질 못한다. 해결 : loginDTO 객체는 값을 전달하는게 목적이므로 확실하게 불변성을 지녀야 한다. 따라서 불변객체로 다시 만들자 public class UserLoginDTO { private final String userId; private final String userPw; public UserLoginDTO(String userId, String userPw) { this.userId = use.. 2022. 5. 16. 2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」 프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다. RestFul Api 의 return 값 1. 되도록 체이닝 하는 방식을 사용 2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자 DTO, VO 간의 매핑 현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO service mapper 계층 이동 시 VO를 이용해야 함 .. 2022. 5. 10. 2022.03.08~03.10 의 기록 ▶ 3일 계획 => 공부 관련 1) 스프링 개구리책 완독 후 노션 및 블로그 정리 2) MVC 객체지향 리팩토링 하루종일 (9일 오늘) 3) 기술 질문 답변 노션 정리 및 SOLID 예제 프로그래밍 => 파이널 프로젝트 관련 1) DB 테이블 완성 및 select JOIN 대략적인 쿼리문 작성 2) git 협업 ▶ 문제 정리 1. 객체 간의 관계 > 단일 책임 원칙으로 클래스를 분리 2. 내부 로직을 구현하는 것은 Model에서 일어나지 않아야 한다 > 상수의 나열인 enum 클래스에서 해결 3. setter 메서드의 생략 (불변성을 지켜라) > 생성자의 주입으로 해결 4. 값 자체의 비교보다 타입의 의미를 더 살려서 비교 > 타입을 적극적으로 사용하여 같은 타입끼리의 비교가 코드 작성의 가독성이 좋다... 2022. 3. 9. 2022.02.27의 기록 ▶ 하루 => 공부 관련 1) 기술 질문 정리 및 준비 (람다식, 스트림, 함수형 프로그래밍, 네트워크) 2) MVC 객체지향 리팩토링 후 제출 후 피드백 받기 3) 스프링 입문 책 읽기 => 파이널 프로젝트 관련 1) UI 업무 분담 회의 (가능하면..?) ▶ 문제 정리 1. 상수화의 문제 > 단순 리터럴 값은 스칼라이다. 문제 : 어느 변수를 어떤식으로 상수화해야 할지 감이 오지 않았다. 해결 : 변하지 않는 값, 중복되는 값을 final로 선언해서 해결하였다. (모든 원시 값과 문자열을 포장) 2. 컴퓨터와 사용자 객체의 분리 > 모든 엔티티를 작게 유지해야한다 문제 : 객체의 속성이 종류가 유지 되는 클래스를 작성했었음 해결 : 길어진다는 것은 유지보수가 어렵고 이해하기 어렵고 단일 책임 원칙을 .. 2022. 2. 27. 2022.02.23의 기록 ▶ 오늘 실현 가능한 세부 목표 => 공부 관련 1) 스트림 Stream / 모던 자바 8 함수형 프로그래밍 2) 자바 리팩토링 3) 금일 배운 내용 복습 4) 스프링 객체지향 책 1단원 => 파이널 프로젝트 관련 1) 화면 목록 및 검사서 회의 ▶ 문제 정리 1. 용어 관련 문제 문제 : 구글링 검색을 하며 공부를 하다보니 모르는 용어 투성이다. 해답 : 계속 검색하며 알아보고 예시를 들어 이해하자. ▶ 공부 내용 MyBatis (Framework) SqlSessionFactory 인스턴스를 생성하기 위해 필요한 정보를 제공하는 환경 설정 파일 properties : property 엘리먼트를 설정하기 위한 상위 엘리먼트 resource 속성 : Properties 파일의 경로를 속성값으로 설정 ⇒ p.. 2022. 2. 23. 2022.02.22의 기록 ▶ 오늘 실현 가능한 세부 목표 => 공부 관련 1) 스트림 2) 자바 리팩토링 3) 금일 배운 내용 복습 4) 스프링 객체지향 책 1단원 => 파이널 프로젝트 관련 1) 화면 설계서 회의 (트레이너 관리 부분) ▶ 문제 정리 1. 익명 객체의 개념 정의가 확실치 않아서 람다식의 이해가 어려웠다. => 익명 객체(클래스)의 개념 확실히 정리 => 일회성의 이벤트이므로 객체에 따로 정의하는 것임. ▶ 공부 내용 JSTL (Java Standard Tag Library) foreach 태그 태그내용을 반복적으로 포함하여 출력하기 위한 태그 var 속성 : 스코프 객체에 저장된 속성값 begin 속성 : 스코프 객체에 저장될 시작값(Integer)을 속성값으로 설정 end 속성 : 스코프 객체에 저장될 종료값.. 2022. 2. 22. 2022.02.14 (개념 정리) ▶ 개인 공부 관련 7. Garbage Collection(가비지 컬렉션)의 동작 방식 Young 영역과 Old 영역은 서로 다른 메모리 구조로 되어 있기 때문에, 세부적인 동작 방식은 다르다. 하지만 기본적으로 가비지 컬렉션이 실행된다고 하면 다음의 2가지 공통적인 단계를 따르게 된다. Stop The World : JVM이 애플리케이션의 실행을 멈추는 작업이다. GC가 실행될 때는 GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업이 중단된다. 당연히 모든 쓰레드들의 작업이 중단되면 애플리케이션이 멈추기 때문에, GC의 성능 개선을 위해 튜닝을 한다고 하면 보통 stop-the-world의 시간을 줄이는 작업을 하는 것이다. Mark and Sweep : Mark: 사용되는 메모리와 사용되지 않는 .. 2022. 2. 15. 2022-02-14의 기록 ▶ 오늘 실현 가능한 세부 목표 => 공부 관련 1) 배운 내용 복습 2) G.C 및 JVM 동작 원리 완전 이해 3) primitive type & reference type 차이점 확실히 외우기 (타입의 대한 차이) 4) 객체지향이 확실히 뭔지 (말로 설명 가능해야함.) 5) 객체지향의 요소(4가지) => 예시를 들어 설명 가능하게 6) 자바의 정석 객체지향 프로그래밍 1 ▶ 수업 공부 관련 => AJAX를 이용하여 db에 바로 접근 가능하게 할 수 있다. => 검색창 유사 검색어 기능은 suggest 기능도 생각할 수 있다. => ajax 제이쿼리 속성에서 dataType : "json"일 경우 자동으로 자바스크립트 객체로 만든다 하지만 다른 파일(xml)을 불러올 시 에러코드 200 발생. (요청.. 2022. 2. 14. 2022.02.10의 기록 ▶ 오늘 실현 가능한 세부 목표 => 공부 관련 1) AJAX 개념 정리 2) 객체지향 책 3단원 읽고 정리 ▶ 공부 내용 AJAX(Asynchronous JavaScript And XML) 동기식 VS 비동기식 ⇒ 동기 방식은 데이터를 처리하기 전까지 다른 작업 수행 불가 비동기는 가능. GET 방식 요청 시 문제점(전달 값이 적은 경우/간단하게 전달할 경우) ⇒ 인터넷 익스플로러는 URL에 한글 전달이 안되므로(브라우저 자체가 자동 파싱이 안됨) 한글 값 전달 시 부호화 처리를 해야 함. POST 방식으로 웹 프로그램을 요청(전달 값이 많은 경우/보안을 요함) ⇒ send 메소드의 매개변수를 사용하여 값 전달 ⇒ 기본은 원시 데이터로 전달(텍스트, multipart/form data → 원시데이터) .. 2022. 2. 10. 2022.1.13의 기록 - 하루 정리 - DB 정의 DRD 관계선 및 엑셀정리 JSP 복습 코딩 - 오늘 공부 내용 - JSP 응답방식은 json, xml로도 응답가능한데 이건 rest WAS에 의해 jsp 웹 문서가 서블릿 클래스로 컴파일 될 때 9개의 내장 객체가 자동으로 선언된다. 젤 많이 쓰는게 request, response, session 객체 join_form.jsp 비정상적인 요청에 대한 응답 처리 response.sendRedirect(String url) : 클라이언트에게 301 상태코드와 URL 주소를 전달하여 클라이언트 브라우저의 요청 URL 주소를 변경하여 재요청하도록 지시하는 메소드 - 리다이렉트 이동 (경로는 최상위 루트 \ 로 잡음 , 원래는 contextroot가 기본이지만(자바일경우) ) ⇒ 리.. 2022. 1. 13. 이전 1 다음 반응형