본문 바로가기

전체 글

(70)
cnsBlog 프로젝트 참여 협업 블로그 개발 프로젝트에 참여하게 되었다.기술 경험에 제한적인 SI를 벗어나 새로운 환경을 경험해보고 싶어서 신청했다. 오프라인이 아닌 온라인에서 협업을 진행하기 때문에, 좀 더 색다른 경험을 할 수 있을 것 같다.애자일/스크럼(방법론), 깃(코드관리), 레드마인(이슈트래커), 젠킨스(CI)를 이용해 협업을 진행할 예정이며,java/spring-boot/gradle(api) javascript/vue.js/npm(front) 환경에서 진행할 예정이다. 현재 프로젝트를 기획한 분이 협업환경과 개발환경 구축까지 완료한 상태다.다음 주부터 블로그 스펙을 정리하고 개발을 진행할 것 같다. 협업 경험이 전무한 내가 제 몫을 해낼 수 있을지에 대한 걱정도 되지만,다양한 노하우를 지닌 다른 팀원들의 개발 방식과 ..
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), 중..
01. [스칼라 테트리스] 오픈 소스, 전체 클레스 분석 스칼라로 작성된 싱글 테트리스 스칼라로 테트리스를 만들어 보려고 한다.이 서비스와 유사한 서비스와 앱을 검색해서 알아보고 정리한다.깃헙에서 Scaltris라는 프로젝트를 발견했다.해당 프로젝트는 1인용 테트리스 게임이다.코드의 흐름을 분석한다.실행 방법우선 실행을 위해선 sbt 1.0이상의 버전이 필요하다.sbt 1.0.2를 설치한 뒤 프로젝트 디렉터리에서 sbt run 명령어를 실행하니 문제없이 실행되었다.프로젝트 설정 방법이클립스에 scala plugin을 설치한다.sbt에 이클립스 플러그인을 추가한 뒤 sbt eclipse 명령어를 입력하면 프로젝트를 이클립스에 import 할 수 있다.코드 분석 - 7개의 scala 클래스 파일이 있다.Scaltris.scala프로그램을 처음 실행하면 시작되는 메..