본문 바로가기

Java22

객체지향 좀 더 이해하기 - 블랙잭 게임 구현 (5) 2-5. Rule 구현하기 Rule은 승자를 판단하는 역할을 갖고 있습니다. 그래서 게임에 참여한 Player들의 카드를 비교해 승자를 구하는 코드를 구현해보겠습니다. public Player getWinner(List players){ Player highestPlayer = null; int highestPoint = 0; for(Player player : players) { int playerPointSum = getPointSum(player.openCards()); if(playerPointSum > highestPoint){ highestPlayer = player; highestPoint = playerPointSum; } } return highestPlayer; } private int.. 2016. 11. 28.
객체지향 좀 더 이해하기 - 블랙잭 게임 구현 (4) 2-4. Player 구현 코드를 보시면 불편해 보이는 코드가 대거 보이실것 같습니다. 2개의 메소드 모두 dealer와 gamer만 다르지 같은 일을 하는 코드가 대부분입니다. 반대로 생각해보면 dealer와 gamer만 하나로 볼 수 있으면 코드 중복을 제거할 수 있지 않을까요?? Gamer와 Dealer는 여러 조건들에 의해 서로 다른 구현 코드를 가지고 있습니다. 하지만 카드를 받아야하고, 가진 카드를 보여줘야 한다는 공통점을 가지고 있습니다. 우린 이 공통점을 묶어 Player라는 객체를 생성하여 Gamer와 Dealer를 Player에 속하도록 수정하겠습니다. (참고로, 이렇게 서로 다른 객체들의 차이점을 배제하고, 공통점만을 취해 단순화 하는 것을 추상화 라고 합니다. 객체지향을 좀 더 단순.. 2016. 11. 27.
객체지향 좀 더 이해하기 - 블랙잭 게임 구현 (3) 2-3. Dealer 구현 다음 단계로 Dealer를 구현해보겠습니다. Dealer의 역할은 아래와 같습니다. 추가로 카드를 받는다. 단, 2카드의 합계 점수가 16점 이하이면 반드시 1장을 추가로 뽑고, 17점 이상이면 받을 수 없다. 뽑은 카드를 소유한다. 카드를 오픈한다. 이렇게 될 수 있었던 이유는 게임의 승패를 판단하는 것은 Rule 객체가, 카드를 뽑는 것은 카드덱 객체가 맡았기 때문입니다. 그럼 위 역할들만 구현해보겠습니다. Dealer에는 Gamer와 달리 16점 이하일 경우에만 추가로 카드를 받을 수 있다는 제한이 있습니다. 이를 구현하기 위해 각 카드별로 포인트를 가질 수 있도록 하는 것이 좋습니다. 해당 기능은 카드를 뽑을때마다 계산할 수도 있지만, 처음 CardDeck에서 카드를 생.. 2016. 11. 27.
객체지향 좀 더 이해하기 - 블랙잭 게임 구현 (2) 2-2. Gamer 구현 Gamer의 역할은 아래와 같습니다. 추가로 카드를 받는다. 뽑은 카드를 소유한다. 카드를 오픈한다. receiveCard와 cards를 담을 구현체를 생성자에 추가하였습니다. public class Gamer { private List cards; public Gamer() { cards = new ArrayList(); } public void receiveCard(Card card) { this.cards.add(card); } public List openCards(){ return null; } } Gamer의 경우 사용자가 현재 카드들의 총 Point를 보며 카드를 더 뽑을지 말지를 결정하게 됩니다. 이를 위해서는 Gamer는 현재 카드들을 확인 할 수 있어야 합니다... 2016. 11. 27.
객체지향 좀 더 이해하기 - 블랙잭 게임 구현 (1) 순수 Java로 이루어진 프로젝트 객체지향을 이해하는데 있어 게시판은 좋은 예제가 아니라는 자바지기(박재성)님과 OKKY fender님의 이야기로 시작한 프로젝트 Java로 웹을 한다고 하면서 실제로 Java와 객체지향을 공부한적이 없던것 같다는 생각이 있었습니다. 그래서 데이터베이스, JSP를 전혀 사용하지 않고 Java와 객체에 좀 더 집중할 예정입니다. 모든 코드는 Github에 있으니 전체 코드를 보고싶으시면 참고하시면 될것 같습니다. (공부한 내용을 정리하는 Github와 세미나&책 후기를 정리하는 Github 를 star 하시면 실시간으로 feed를 받을 수 있습니다.) 주제 블랙잭 게임(나무위키 참고)을 개량해서 구현할 예정입니다. 블랙잭 규칙 전부를 구현하는건 지나친 감이 있어서 조금은 스.. 2016. 11. 27.
Java SE 코드 성능 비교 Java SE 성능 비교 Spring환경에서 개발을 하고 있지만, Java 공부를 안할수는 없다. 여러 선택의 순간에 어떤 코드가 더 좋은지 안좋은지는 개인의 취향 혹은 팀의 코딩 컨벤션이 가장 중요하겠지만, 그럼에도 불구하고 동일한 조건이라면 더 좋은 코드는 분명히 존재한다고 생각한다. 그래서 큰 이슈는 아니지만 성능상 더 좋은 코드가 어떤 것인지 직접 테스트해보고 기록하기로 하였다. (뭐든 기본이 중요하다!!!) 아래 테스트들은 모두 성능만 고려하였다. 사내 규약 혹은 사수의 조언이 있다면 그걸 우선시 하는게 맞다. 그런게 없다면 아래 기준에 따라 코드 선택을 하는것도 나쁘지 않을것 같다. 모든 테스트는 Java 8을 기준으로 진행하였다. 사내 신규 프로젝트가 전부 8로 진행되기도 하였고, 조금 있으.. 2016. 11. 3.