본문 바로가기

OOP, FP

(37)
이펙티브 자바 02. 점층적 생성자 패턴, 자바빈 패턴, 빌더 패턴 필수적 요소와 선택적 요소클래스의 인스턴스를 생성할 때, 필수적인 요소와 선택적인 요소가 여러개 필요한 경우가 있다.정적 팩토리 메소드나 생성자는 선택적 인자가 많은 상황에 잘 적응하지 못한다는 문제점을 갖고 있다. 마트에서 포장 판매되는 음식을 살 때, 음식에 붙어있는 영양 성분표를 예로 들어보자. 영양 성분표에는 반드시 포함되어야 하는 항목이 몇 가지 되지 않는다.총 제공량(serving size), 1회 제공량(servings per container), 1회 제공량당 칼로리(calories per servings) 등이 필수적인 항목이다.반면에, 선택적인 항목은 적어도 20개가 넘는다.총 지방 함량(total fat), 포화 지방 함량(saturated fat), 트랜스 지방 함량(trans fa..
이펙티브 자바 01. 정적 팩토리 메소드와 서비스 제공자 인터페이스 (JDBC 예제) 객체 생성자바에 처음 입문하면 클래스와 객체에 대해 배운다.이후 실습을 통해 생성자를 정의하고 new 키워드로 생성자를 호출하여 객체를 만들어 사용하는 연습을 하고,시그니처와 오버로딩을 이용해 여러 개의 생성자를 정의하여 제법 객체지향적인 코드를 만든다. 생성자생성자는 객체를 생성하기 위해 기본적으로 제공되는 기능이다.하지만 생성자의 시그니처만을 보고 개발자의 의도를 완전히 파악하기는 어렵다.때문에 우리는 API 문서를 보고, 우리에게 필요한 생성자를 찾아야 한다.정적 팩터리 메소드를 사용하면 메소드 이름, 반환 자료형만으로 의도를 전달할 수 있다. 정적 팩토리 메소드클래스 자신의 타입을 반환하는 public static 메소드.클래스를 정의할 때 생성자와는 별도로 정적 팩토리 메소드를 제공할 수 있다...
07. [스칼라 테트리스] 03. 블록 클래스 구현, 테스트 스칼라 테트리스 github 이제 본격적으로 테트리스 코드를 작성하고, 테스트 케이스를 만든다.지금까지 코드를 작성하고 일일히 메소드를 실행하면서 테스트를 진행했다.하지만, 이는 나 혼자만 알고있는 테스트 과정으로, 남들은 이 코드가 올바르게 동작하는 지 알 수 없다. 테스트 케이스를 작성해 본 적이 없고, 영어가 많이 부족하기 때문에 힘들겠지만...이번에는 하나의 클래스를 만들고 메소드마다 테스트 케이스를 작성하는 방식으로 진행하려고 한다. 스칼라는 scalatest 라는, 자바의 JUnit과 같은 테스트 라이브러리가 존재한다.이 라이브러리는 여러가지 테스팅 스타일을 제공한다.이 테스팅 스타일 중 나는 FlatSpec라는 스타일을 선택했다. 123456789101112131415import org.sc..
06. [스칼라 테트리스] 02. 프로젝트 생성 SBT스칼라 프로젝트를 만들고 빌드하기 위해서는 SBT(Simple Build Tool)라는 툴이 필요하다.SBT는 최신 빌드 도구 중 하나로, 스칼라로 작성되어 사용하기 편한 기능을 제공하는 범용 빌드 도구이다.나머지 자세한 설명은 위의 링크를 클릭하여 읽어보길 바란다. SBT를 설치한 뒤, 환경변수를 등록해야 한다.윈도우 기준으로 윈도우 키 + r를 누르면 실행 창이 나타나는데, sysdm.cpl 을 입력해보자. 그럼 시스템 속성을 설정할 수 있는 창이 나타난다.고급탭에서 환경 변수(N)... 버튼을 클릭하면 환경 변수를 등록할 수 있는 창이 나타난다.시스템 변수에서 Path로 등록되어 있는 변수를 찾아서 편집을 클릭하자.환경 변수 편집창에서 "SBT 설치 경로\bin"을 등록하면 커맨드라인 창에서 ..
05. [스칼라 테트리스] 개발시작 01. GUI 라이브러리 비교와 전체구조 자바 스윙기반의 스칼라 싱글 테트리스에 대한 분석을 마쳤다.이제 이를 기반으로 나만의 프로그램을 어떻게 만들 것이며, 무엇이 필요한지에 대한 정리가 필요하다.Swing 의 단점이 무엇일까?학창 시절, 스윙의 단점은 속도에 있다고 배웠다.스윙 기반의 가상 윈도우를 만들었는데, 속도가 굉장히 느렸다.실행 시 메모리를 너무 많이 차지한다.속도는 시간이 해결해준다?1995년 자바가 처음 등장했을 때부터 제기되었다.아직까지 해결이 안되었다.8년? 10년 뒤에도 같은 문제가 제기될 것이다.비주얼 베이직보다 느린 스윙을 선호하는 사용자는 별로 없다.초기 Java 설계 시 함수 포인터의 개념을 빼서 오직 인터페이스만을 이용해서 Event Driven을 만들어야 한다.코드가 길어진다.재사용이 어렵다.단점이라고 하긴 뭐하..
04. [스칼라 테트리스] GUI, 스윙 컴포넌트 이벤트 분석 -2- 이번에는 이벤트를 감지하여 블록의 움직임, Row 클리어, 화면 갱신, 게임 오버 등의 동작을 발생시키는 클래스들을 분석할 차례이다.Board 라는 클래스에서 2차원 배열로 Block을 담는다.1차원은 Board의 y, 2차원은 Board의 x를 표현한다.Board 클래스는 이름이 같은 짝 객체(Companion Object를 갖는다)보통 팩토리를 만들 때 짝 객체를 사용한다. 123456class Bar(foo: String) object Bar { def apply(foo: String) = new Bar(foo)}// Bar()를 이용하여 'new' 키워드를 사용하지 않고 새 객체를 만들 수 있다.cs width, height를 속성으로 갖는다.EmptyBoardRow 속성은 보드의 width만큼 ..
03. [스칼라 테트리스] GUI, 스윙 컴포넌트 관련 클래스 분석 -1- 오늘은 UI를 분석하기 전에, 스칼라의 Swing에 대해 공부했다.스칼라는 JVM 기반으로 구동된다. 자바의 광범위한 라이브러리를 가져다 쓸 수 있으며,문법 또한 자바와 상단 부분 비슷하다. 아직 스칼라 책을 두번정도 읽어봤을 뿐, 딱히 무언가를 만들어 본 적이 없다. 뿐만 아니라, 스칼라로 프로그램을 만들어본 경험이 없기 때문에 트레잇, 패턴 매칭, 높은 다형성과 같은 스칼라의 장점이 잘 이해가 가질 않는다. 스칼라의 장점은 무엇일까?일반적인 함수형 언어와 같이 의도하지 않았던 부작용으로 부터 발생하는 이슈들을 줄이기 위해 함수형 프로그래밍 테크닉을 익힐 수 있다. 부작용은 이전에 함수형 자바스크립트에서 공부한 부수 효과와 같은 것이다.함수에서 출력(반환) 이 아닌 외부의 상태에 영향을 미치는 효과를 ..
02. [스칼라 테트리스] 자료 구조 분석 단면 테트로미노는 아래와 같이 알파벳과 블록이 매칭된다. I O TJ L S Z 테트로미노는 4개의 정사각형으로 이루어진 폴리오미노다.폴리오미노란 n(n > 1)개의 정사각형들이 서로 최소한 1개의 변을 공유하여 만들어지는 다각형들을 총칭한다가장 작은 단위인 Block 클래스가 있다.기본 블록들은 4개의 정사각형의 좌표를 튜플로 관리하여 모양을 표시한다.블록은 패널의 (5, 1)부터 그려진다. (이를 중앙 혹은 (0,0)이라 칭하겠다)블록의 움직임은 left: x가 1감소, right: x가 1증가, top: y가 1감소, bottom: y가 1증가 와 같이 움직인다.T는 중앙(0,0), 중앙왼쪽(-1,0), 중앙오른쪽(1,0), 중앙아래(0,1)로 시작한다.S는 중앙(0,0), 중앙왼쪽(-1,0), 중..