You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

OOP는 실 사물을 프로그래밍의 오브젝트로 반영해서 조금더 리얼 세상과 비슷한 방식으로 프로그래밍을 하게해준다.


카드분석

그래서 OOP개발의 첫단추는 코딩을 하는것이 아니다.  함수 오버라이딩/오버로딩 이런 차이가 뭐냐 면서

떠들어데며 OOP의 고수인양 어깨에 힘주는 사람은 멀리해라~ 배울게 없다. 그런것은 구글링하면 많이 나온다.

제일 처음 해야할것은 사물에대한 분석이고 이해이다.  

  • 카드는 4가지 모양이 있다 
  • 카드는 고유 숫자와 그에 해당하는 Ace~King 각각의 고유 이름이 있다.
  • 카드 셋팅은 카드의 숫자와 모양을 지정할수 있으며,  King of Diamond라는 자연스러운 카드명을 사용할수 있다

카드구현

  • 카드는 4가지 모양이 있다 → enum이라는 열거형을 사용
  • 카드는 고유 숫자와 그에 해당하는 Ace~King 각각의 고유 이름이 있다.  → 각 랭크를 배열에 맵핑
  • 카드 셋팅은 카드의 숫자와 모양을 지정할수 있으며,  King of Diamond라는 자연스러운 카드명을 사용할수 있다 →  toString 재정의
Card 작성
package game.poker;

public class Card
{

    public enum Suit
    {
        CLUBS, DIAMONDS, HEARTS, SPADES
    };

    private final Suit suit;

    private final int rank;

    private final String[] NAMES = {"Dummy", // element 0 not used
            "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
            "Ten", "Jack", "Queen", "King"};

    public Card(int givenRank, Suit givenSuit)
    {
        rank = givenRank;
        suit = givenSuit;
    }

    public int getRank()
    {
        return rank;
    }

    public Suit getSuit()
    {
        return suit;
    }

    public String toString()
    {
        return NAMES[rank] + " of " + suit;
    }

    public static String toString(Card[] arr)
    {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; ++i)
        {
            if (i > 0)
            {
                // every element after first one has comma before it
                sb.append(", ");
            }
            sb.append(arr[i]);
        }
        sb.append("]");
        return sb.toString();
    }
}


카드 실행

Card테스트
@Test
public void cardTest(){
    for(int i=1;i<14;i++){
        Card card1 = new Card(i, Card.Suit.DIAMONDS);
        System.out.println(card1);
        //check
        if(i==13) assertThat(card1.toString()).as("cardTest").isEqualTo("King of DIAMONDS");
    }
}






  • No labels