/ NOTE

note - 1차 프로젝트(6조) 리뷰

프로젝트 발표중 인상 깊었던 세 팀에 대한 코드 리뷰

6조 선택 이유 - 도전적인 주제로 두근거리게 했다! 보자마자 이 프로젝트는 꼭 뜯어보고 싶었다

static void comsleep(){
    try{
        int num = 3;
        for(int i = 0; i < num; i ++){
            System.out.print(".");
            Thread.sleep(800);
        }
    } catch (InterruptedException e){
        e.printStackTrace();
    }
}

console 시간 지연 기능을 주어 생동감 있는 플레이를 구현했다

thread 에 대해서 더 알아봐야겠다

수업에 참여하기 전엔 혼자 막무가내로 원하는 언어, 기능등을 찾아가며 직접 구현하고, 오류와 부딪치며 배우다가,

수업을 들으면서 선생님의 진행방식에 믿고 따라야 한다는 생각에 예습이나 배우지 않은 코드는 사용하면 안된다는 강박관념이 있었는데,

무조건적인 자기주도 학습 지양의 태도는 오히려 사고의 틀을 막는 경우가 생길 수도 있다는 경각심도 들었다

파이썬에서도 그렇고 java에서 buffer을 이용해보려고 시도중인데 예외처리를 해주는 부분이 어렵게 느껴진다.

과정에서 필요한 데이터가 같이 누락되버리는 경우도 있고, 완전히 잡지 못하는 경우도 있고,

사실 그러다보니 이런 구조를 최대한 기피하기도 한다

더 숙련이 필요한 부분이라 생각이 들었다! 극복해야지!

if(a.equals("Y") || a.equals("y")){
    main.main(null);
}

main 메소드를 불러 호출 방향을 비틀수도 있다! 생각하지 못한 부분이다

내 프로젝트에서는 main 메소드의 코드들을 묶은 또다른 메소드를 만들어 호출 했는데 이렇게 할 수도 있구나

단점으로는 전체적으로 해당 메소드를 실행하고 종료시키는게 아닌,

해당 메소드 내에서 main 메소드를 다시 호출하면서 프로그램이 계속 쌓여가는 구조가 많았고,

다음 단계로 넘어갈 때 반복문에 대한 확실한 break 과정이 누락된 부분도 있어서 프로그램 과부하의 요소가 많았다

DecimalFormat formatter = new DecimalFormat(###,###);

decimal 도 설정해줄수가 있다! 나는 이런 세세한 퀄리티를 높이는 작업을 보면 기분이 좋다

int ac = (int)(Math.random() * 3 + 1);

컴퓨터의 배팅 선택지를 랜덤으로 선택하게 해주는 코드

좀 아쉬운 부분이다. 프로젝트 개발팀에 대한 아쉬움이 아니라 본질만 놓고 보면 컴퓨터와 가위바위보 배팅이랑 다를게 없어지게 만들 수 밖에 없는 기술적 한계에 부딪친 느낌이다

추후 수업의 진도를 더 나가면 단순 랜덤이 아닌, 컴퓨터의 선택 이유를 로직으로 구현할 수 있지 않을까 하는 막연한 기대감이 있다

for(int k = 0; k < 7; k++){
    for(int i = 0; i < Game.cardDeck.length; i++){
        for(int j = 0; j < Game.cardDeck[i].length; j ++){
            if(userD[k].equals(Game.cardDeck[i][j])){
                if(Integer.parseInt(user.substring(1)) == j){
                    if(interger.parseInt(user.substring(0,1)) < i){
                        user = i + "" + j;
                    }
                }else if(j > Integer.parseInt(user.substring(1))){
                    user = i + "" + j;
                }else{

                }
            }
        }
    }
}

substring : 글자 추출 메소드

아직 배우지 않은 부분이라 최대한 배제하고 작성할 방법이 없을까 생각해보았다

substring을 통해 해당 String의 배열에 접근하는 방식을 생각하면 가능하다

하지만 String 배열을 별도로 명시해주는 과정이 필요하고, 카드덱을 2중 배열이 아닌 3중 배열을 사용했어야한다!

그렇게 되면 불필요한 코드가 늘고 복잡해져 가독성이 떨어지므로 substring을 사용하게 된게 아닐까 싶다

이를 통해서 String 입력값은 하나의 배열임을 다시 한번 확인하고 넘어갈 수 있는 기회였다

static void randomDeck(){
    for(int t = 0; t < 15; t +=2){
        userDeck[t/2] = cardShuffle[t];
        computerDeck[t/2] = cardShuffle[t+1];
    }
    Game.check(Game.userDeck, Game.computerDeck);
}

유저와 컴퓨터의 덱을 한번에 뽑아 나눔으로 중복확인 절차를 한번으로 끝낼 수 있는 깔끔한 코드였다!

전체 후기

지금 있는 코드만으로도 나를 되돌아 보고, 새로운 기능들도 배울 수 있는 좋은 기회였고

앞으로도 배워나가며 이곳에 적용해 개선할 수 있는 기능들이 많은 프로젝트라는 느낌이 들었다!

보물을 하나 찾은 느낌