각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 1 회고 (32일차)

제이온 (Jayon) 2021. 3. 5.

안녕하세요? 제이온입니다.

 

오늘은 미션이 끝난 다음 날이고, 아직 피드백이 오지 않아서 비교적 여유롭게 하루를 보냈습니다.

 

 

데일리 미팅

오늘의 데일리 미팅 진행자는 제리였습니다. 제리는 과거 로키가 데일리 미팅때 하였던 '라이어 게임'의 업그레이드 버전을 하자고 제안하였습니다. 당연히 모두들 반응이 좋았고, 추가된 내용은 스파이와 경찰 직업이 생겼다는 것입니다. 스파이는 라이어가 누군지는 모르나, 라이어를 간접적으로 돕는 역할이고, 경찰은 매 턴이 끝날 때마다 라이어를 조사할 수 있습니다.

 

딱 들었을 때 마피아 게임과 상당히 유사하다고 생각하였고, 설레는 마음으로 게임에 참여하였습니다. 제시어는 환풍기였고, 저는 일반 시민이었습니다. 다들 적당히 환풍기에 대해 이야기를 하였는데, 이것을 '일본 음식이 연상된다.'와 '어디에나 있다.', '우리 집에도 있다.'라고 표현한 크루가 의심을 받았습니다. 다들 일본 음식이 무엇인지 궁금해서 그쪽으로 논점이 흐려졌고, 그 와중에 바다는 '어디어디 집에 있다.'라고 말한 크루들을 의심해 봐야한다고 의견을 냈습니다. 그런데 오히려 다른 크루들이 바다가 라이어같다고 몰아서 투표로 게임 오버를 시켰습니다 ㅋㅋㅋㅋ

 

알고 보니 바다는 경찰이었고, 그 이후로 우왕좌왕하다가 애꿏은 시민만 죽이다가 뽀록으로 라이어인 마크를 찾아냈습니다. 다행히, 마크는 환풍기가 아닌 선풍기라고 해서 틀렸고 시민이 승리를 하긴했으나 좀 찝찝한 게임이었습니다.

 

게임이 종료되고 나서 데일리 미팅 진행자를 정했는데, 샐리가 다음 주 월요일에 진행하기로 하였습니다.

 

 

클래스와 인스턴스 수업

오늘은 오전에 제이슨이 '클래스와 인스턴스'라는 주제로 강의를 진행해 주셨습니다. 이 중에서 눈여겨볼 만한 내용의 링크를 공유해 주셨는데, 이곳을 참고하시길 바랍니다. OOP를 공부할 때, 상당히 도움이 되는 내용이라고 생각합니다.

 

이후에 상속과 조합에 대한 이야길르 해 주셨습니다. 여기서 중요한 점은 상속을 쓰되, '잘' 써야하는 것입니다. 결론만 말하자면, 상속은 확장이 아니라 정제를 할 때 사용해야한다는 것입니다. 쉽게 말하면, 상위 클래스를 추상 클래스로 만들어서 상위 클래스 자체는 인스턴스화하지 못하고, 하위 클래스를 통해서만 구현할 수 있도록 만드는 것이죠. 여태까지는 단순히 하위 클래스에서 중복되는 메소드를 추출해서 상속을 사용하였는데, '정제'라는 의미를 잘 떠올리면서 상속을 사용하려고 노력해야겠습니다.

 

 

캐비넷 배정하기 미션 수행

이번주 화요일 처음으로 백엔드 크루들이 루터 회관으로 갔을 때, 간단 미션으로 캐비넷 배정하기를 진행하였습니다. 그런데, 저 혼자 온라인이어서 어리바리를 까다가 미션을 거의 건드리지도 못하고 블랙잭 미션으로 넘어갔습니다. 그 부분이 아쉬워서 오늘은 혼자 크루들의 캐비넷 위치를 배정하는 프로그램을 만들어 보았습니다.

 

미션은 굉장히 단순합니다. 요구 사항을 봅시다.

 

 

 

 

 

 

관건은 랜덤으로 캐비넷을 배정하되, 이 프로그램을 제작하는 페어는 원하는 캐비넷을 선택할 수 있습니다. 또한, 40번 캐비넷은 원칙적으로 사용이 불가하므로 어떤 크루도 이곳에 배정되면 안 됩니다.

 

 

저는 특정 위치를 제외하고 랜덤으로 섞는 과정에서 조금 고민이 있었는데, 일단 모든 위치를 랜덤으로 섞은 다음에 특정 위치들을 따로 체크해 주기로 하였습니다.

 

 

    public static List<String> allocateWithFixedMembers(final String fixedMemberInfo,
        final int exclude) throws IOException {
        final List<String> members = autoAllocate(exclude);
        final String[] fixedMembers = fixedMemberInfo.split(",");
        for (final String fixedMember : fixedMembers) {
            final int idx = Integer.parseInt(fixedMember.split(":")[0]) - 1;
            final String name = fixedMember.split(":")[1];
            if (!members.get(idx).equals(name)) {
                Collections.swap(members, idx, members.indexOf(name));
            }
        }
        return new ArrayList<>(members);
    }

 

 

위와 같이 사용하지 않는 캐비넷을 제외하고, 모든 크루를 캐비넷에 배정한 결과 리스트를 가져 옵니다. 그리고 특정 캐비넷에 고정시킬 크루 정보를 가져와서, 그 크루가 원하는 캐비넷에 본인이 배정되었는지 확인합니다. 그렇지 않다면, 다른 캐비넷에 있는 크루와 자리를 바꿉니다. 이때, Collections.swap()를 통해 쉽게 스왑이 가능하였습니다.

 

 

그리고 아래와 같이 출력문을 작성하면 끝입니다.

 

 

 

 

그 외에 크루 목록을 txt 파일로 읽어왔는데, 오랜만에 java로 파일 입출력을 복습하는 좋은 기회였다고 생각합니다.

 

캐비넷 배정하기 미션 코드는 이곳을 참고하시면 되겠습니다.

 

 

자격증 공부

원래 같으면, 미션 동안 못 읽었던 책을 읽으면서 정리를 하였을 것입니다. 그런데, 당장 내일 정보처리산업기사가 시험이다보니까 어쩔 수 없이 아직 한 번도 못 본 5과목을 공부할 수 밖에 없었습니다. 그마저도.. 어제 오전 6시에 일어나고 너무 피곤하게 하루를 보내서 그런지 중간에 잠에 들어버렸습니다. 대신 내일 일찍 일어나서 필기 내용을 조금 더 보려고 합니다. 사실은 지금도 자야하는데 포스팅한다고 안 자고 있네요.

 

 

정리

오늘은 좀 더 열심히 할 수 있는 날이었는데, 그렇지 않아서 아쉽습니다. 그래도 휴식을 취했다고 생각하고, 내일 시험이 끝난 다음에 SOLID 포스팅과 디자인 패턴 포스팅을 각각 올려야겠습니다.

댓글

추천 글