//사용방법 Book book = new Builder("MYBOOK").setContent("IT"),setAutor("JINSUB").build(); public class Book { private String title; private String content; private String author; public Book(String title) { } public void setTitle(String title) { this.title = title; } public void setContent(String content) { this.title = title; } //...이하 파라미터별 set함수 Vo Class 및 DTO Class를 설계할 때, 필요한 인자들을 선택적으로 받아야할 경..
도메인의 사전적 정의는 아래와 같다. A domain is a field of study that defines a set of common requirements, terminology, and functionality for any software program constructed to solve a problem in the area of computer programming, known as domain engineering. 컴퓨터 프로그래밍으로 문제를 해결하기 위해 만들 소프트웨어 프로그램을 위한 요구사항, 용어, 기능을 정의하는 학문 영역이 도메인 공학이다. - 위키백과 간단히 말하면 해결하고자 하는 문제의 영역 을 도메인이라고한다. 소프트웨어 입장에서 다시 해석하면 개발하고자 하는 소프트..
신장트리(Spanning Tree) 그래프 내의 모든 정점을 포함하는 트리(필연적으로 연결 트리이다.) 최소 연결 = 간선의 수가 가장 적다. N개의 정점에서는 간선이 N-1개가 된다. 사용 : N개의 정점을 최소의 케이블을 사용하여 연결하고자 하는 경우(통신 네트워크) MST 최소신장트리(Minimun Spanning Tree) 신장트리에서 간선의 가중치 합이 최소인 트리 나올 수 있는 여러 개의 신장트리중에 간선의 가중치의 합이 가장 작은 트리 사이클이 포함되지 않는다!(신장트리 자체가 최소 간선이므로 사이클이 있을 필요가 없다.) MST 구현 방법 - 크루스칼 알고리즘 간선을 선택하는 알고리즘 간선을 정렬한 뒤 작은 순서대로 선택(Greedy) 이 때, 사이클을 형성하는지 체크한다. 추가하고자 하는..
롬복?(lombok) 자바 개발자들의 필수 라이브러리 롬복. 자바 개발에 자주 사용되는 코드, getter,setter, 기본 생성자, toString등을 어노테이션으로 자동생성해주는 라이브러리다. 1. 인텔리제이 + 그래들에서는 아래와 같은 방법으로 간단하게 추가가 가능하다. 이 방법으로 하면 최신 Gradle에서는 안된다 (아래 참조) 2. Shift+Command+A를 통해 액션을 켜고 'Plugins'를 입력해서 검색한다. 3. 롬복을 검색해서 플러그인을 설치한다. 4. 인텔리제이 재시작 5. 재시작하면 우측하단에 롬복에 대한 설정이 필요하다는 팝업이 뜬다. Enable을 클릭하면 자동으로 설정이 된다. 6. 완료! 이게 문제가 아니라 롬복을 이용한 생성자, get메소드 생성 이후에 또 테스트 코..
2021.01.10 단위 테스트를 위한 코드 작성을 할 수 있다. TDD랑은 다르다. TDD는 테스트 코드를 먼저 작성하는 것이 시작이다. 단위테스트와 TDD의 차이 TDD RED - 항상 실패하는 테스트를 먼저 작성 GREEN - 테스트가 통과하는 프로덕션 코드 작성 REFACTOR - 테스트가 통과하면 프로덕션 코드를 리펙토링 합니다. 단위테스트 단지 기능 단위의 테스트 코드를 작성하는 것을 이야기 한다. 꼭 테스트 코들르 먼저 적성한느 것을 포함지 않고 리펙토링도 포함하지 않는다. 테스트코드 작성이유 단위 테스트는 개발단계 초기에 문제를 발견하게 도와줌 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등을 할 때 기존 기능이 올바르게 작동하는 지 확인할 수 있음 기능에 대한 불확실성 감소 단위 테..
스프링 부트 프로젝트를 생성할 때 빌드 툴을 Gradle로 할 수 있다. Maven도 있지만 기능상 차이보다는 편한 것 선택하면 된다. 나는 좀더 힙해보이는 그레이들 선택 그래이들 빌드 스크립트 파일인 gradle.build를 해서 설정을 해줘야하는데 개념을 잘 이해하고 넘어가고 싶었음. 의존성이나 플러그인 설정 같은 빌드에 필요한 설정을 하는 곳이다. 해당 스크립트를 읽어서 프로젝트를 빌드할 수 있다. 참고한 build 스크립트가 중구난방이라 알아보니 2.1 버전부터 문법이 업데이트 됨.(이전 문법도 가능) 직접 작성하는 방법도 있지만 가장 쉬운 방법은 스프링 이니셜라이저를 이용해 프로젝트 기초를 다운 받을 수 있다. https://start.spring.io/ 여기서 한가지 의문점 발생 의존성 설정 ..
객체지향이란? 객체지향프로그램 설계는 어플리케이션이 객체들이 어플리케이션 구동이라는 목표를 위해 각자의 역할을 책임을지고 협력하는 프로그램이다. 전체 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법 객체는 각자가 충분히 자율적이야하고 다른 객체가 봤을 때 무엇을(what)하는지 알 수 있지만 내부가 어떻게(how)처리하는 지는 알 수 없어야한다. → 알아서 자율적으로 책임지고 처리해야한다. 다른 객체가 참여하면 객체지향적인 프로그래밍과는 거리가 멀어진다. 객체 간에는 공동의 메세지만 주고 받는다. 따라서 객체지향 설계는 이 객체들을 얼마나 적절한 책임을 선택하고 지정하는지가 핵심이다. 따라서 평소에 객체지행적으로 사고의 중심을 전환해야지 훌륭한 객체지향 설계..
DO 객체지향 내용 정리 - 공부한 내용 한 번더 정리 (그냥 인상깊어서... 책임! 역할! 협력!!) 객체지향 실전을 위해 스프링 부트 시작 - 스프링 객체지향을 실전 적용 연습 목적으로 책 병행해서 공부시작 - 다른 언어들도 가능하지만 자바가 객체지향 연습하기 좋을 것 같아 고민하다가 시작했다. 객체지향적인 사고를 체득하는 것이 목적. 플러그인이란? 소프트웨어의 일부이다 (= 플러그인도 프로그램이다.) 원래 프로그램에는 없지만 Plug-In 해버리면 그 기능을 사용할 수 있는 것 웹브라우저에서 사용하는 플러그인이 대표적이다. 얼마전 종료된 Adobe Flash도 플러그인이다. 웹브라우저가 처리하지 못하는 것을 부분적으로 처리해주는 것 처럼 표준기능을 확장해주는 별도의 프로그램이다. ----------..
TIL 1. 변수와 메모리 관련해서 내용 정리 - 변수를 메모리에 저장하는 방법하고 기본형 변수 참조형 변수와 저장 메모리 공부했다. 그냥 대충 알아고 넘어가도 문제 없었지만 간단한 기본만 한번 더 숙지해도 혼란이 줄고 이해력이 사고력이 크게 증가한다 기본형 데이터 - 불변값(Real 해당데이터 가비지콜렉팅 당하기 전까지 안변함) 참조형 데이터 - 가변값( 참조 주소의 변경 가능) 변수이름과 가르키는 주소가 있고 해당 주소에 값이 들어있음 값을 변경할 때 변수는 해당 값이 있다면 해당 값이 들어있는 주소를 참조하고 없다면 해당 값을 저장하는 메모리 공간을 할당해 저장한다. 참조가 없어진 변수는 가비지컬렉트 단계에서 제거된다 . 참조형 변수는 배열이나 key:value를 생각하면 쉬운데 변수에 저장된 주소..
1. 주말에 [객체지향의 사실과 오해] 책을 일고 보면서 객체에 대한 개념을 다시 잡았다. 클래스라고만 알고 있던 객체에 대해서 틀이 깨졌다. 지금가지 완전히 뜬구름처럼 알고 있었고 어떤 방향으로 객체를 생각해야하는지 배웠다. 응집도,결합도, 복잡도 등등 다양한 설계 관련 용어들에 대해서 객체지향적인 사고로 생각을 정리할 수 있었다. 자바할 때 매일 빨간색 자동차나 사람과 학생,선생 클래스 정도로만 알고 있던 객체는 생각보다 훨씬더 넓고 프로그래밍에 있어서 굉장히 기본적인 개념이었다. 하나의 어플리케이션을 구성하는 것이 객체들이고 이들의 협력과 조화로 어플리케이션이 만들어진다. 특히 ,변수의 타입도 객체라는 생각을 해본 적이 없었는데 개발자는 변수를 만들고 값을 넣어서 사용하지만 그 뒤에서는 변수 타입 ..