모은 돈을 탈탈 털어서 온갖 책들과 온라인 강의를 구매하고 머리를 쥐어뜯으면서 지식을 쑤셔왔던 것보다, 지난 2주동안 요구사항을 부여받고 지식을 실천함으로써 경험한 "미션 기반 학습 과정"이 훨씬 즐거운 마음가짐과 성장에 효과적인 것 같다는 생각을 가지게 되었다.
미션이나 요구사항은 문제에 대한 책임감을 부여해주고, 그 책임감은 문제가 해결되지 않으면 잠에 들고 싶어도 문제에 대해 생각할 수 밖에 없는 몰입을 경험시켜주기 때문이다.
맨먼스 미신과 황농문 교수님의 몰입이라는 책을 읽고 이상적이긴 했지만, 해야 돼서 하는게 아니라 정말 선택적, 능동적으로 몰입을 실천할 수 있는건지 의심했었는데.. 사실이 맞는 것 같다. 의심했던게 죄송해질 정도로 체감한다.
동시에 1주차 미션 이후 뛰어난 사람이 많아도 너~~~무 많다는 사실과 그 사람들과의 격차에 대한 고민을 해소하려 노력하면서 2주차를 보냈다.
우선 다른 사람들의 코드를 읽어보고 동경심을 가지게 되었다.
그러다보니 주눅들기도 하지만 다른 사람의 능력을 봄으로써 배우는 시간을 가지고, 배움을 실천해서 내 것으로 만들 순 없는지 고민했었다.
개인적 욕심으로는 그들의 경험을 모방하는걸 넘어서서 훔쳐가는 것까지 도달해보고 싶었지만 지식들을 실천하면서 미션에 적용하려고 노력하는게 최선이었던 주였던 것 같다.
역시 달리 방법이 없는 것 같다.
절대적으로 많이 시간을 투자해야하고,
그러기 위해선 지치고 힘든 시간을 견디는 것은 좋은 생각이 아니다.
지친 것, 힘든 것, 고독한 것 등등..
"모든 걸 잊을 수 있을 정도로 즐길 수 있는가?"
"어떤 것도 신경 쓰지 않을만큼 즐기는 중인가?"
라는 질문으로 요약되는 것 같고, 이것에 대답하는게 유일한 방법이라고 생각한다.
누구나 하나씩, 아주 열심히, 끈기를 가지고 부단하게 노력하는 것 말고는 정말로 방법이 없다.
프리코스 4주차가 끝난 뒤에 프로그래밍을 지금보다 더 즐길 수 있을지 스스로 대답해보고 싶다.
미션을 진행하면서 IDE나 원격 저장소와 친하지 못해서 겪었던 삽질의 이유를 탐색하고, 해결에 도달한 경험을 기록했었다.
(비공개로 포스팅 후 미션 기간이 지나서 공개로 전환했다.)
클릭하여 이동!
상수를 따로 분리하면 안 되는걸까? 라는 고민에서 시작되었다.
불변 객체를 왜 쓸까?를 참고해서 값이 변하지 않도록 보장받는 변수들을 따로 상수 클래스로 분리해서 보관했다.
보관
public class Constant {
public static final String GAME_START = "숫자 야구 게임을 시작합니다.";
public static final String GAME_OVER = "게임을 재시작하려면 1, 종료하려면 2를 입력해주세요.";
public static final String GAME_END = "게임 종료";
public static final int MAX_INDEX = 3;
public static final String STRIKE = String.format("%d스트라이크", 3);
public static final String VICTORY = "\n3개의 숫자를 모두 맞히셨습니다! 게임 종료";
}
사용
for ( int keyIndex = 0; keyIndex < MAX_INDEX; keyIndex++ ) {
char index = userLine.charAt(keyIndex);
int valueByKey = getNumericValue(index);
userRepository.put(keyIndex, valueByKey);
}
return userRepository;
}
private static boolean isRecursion(String readLine) {
Map<Integer, Integer> user = inputUserNumber(readLine);
Hint.loopHint(user, computerBoot);
String result = Print.printResult();
System.out.println(result);
boolean recursion = result.equals(STRIKE);
while ( !recursion ) {
readLine = Console.readLine();
user = inputUserNumber(readLine);
Hint.loopHint(user, computerBoot);
result = Print.printResult();
System.out.println(result);
recursion = result.equals(STRIKE);
}
victory();
System.out.println(GAME_OVER);
return recursion;
}
문자를 검사해야 하는 방법을 모색하던 중, 이번 기회에 정규 표현식에 대해 배워보기로 했다. 많이 부족했지만, 항상 어렵고 신비로워 보이던 정규식을 실제로 사용해보는 것만으로도 보람차고 즐거웠다.
private static void patternCheck(String validation) {
String asterRiskExpression = "^[₩~!@#$%^&*()-+=/.,|]*$";
String stringExpression = "^[abcdefghijklmnopqrstuvwxyz]*$";
Pattern compileAsterRisk = Pattern.compile(asterRiskExpression);
Pattern compileString = Pattern.compile(stringExpression);
Matcher asterRiskCheck = compileAsterRisk.matcher(validation);
Matcher stringCheck = compileString.matcher(validation);
if ( asterRiskCheck.find() || stringCheck.find() ) {
throw new IllegalArgumentException("서로 다른 수로 이루어진 세자리 수를 입력해주세요.");
}
}
고민하는 과정 속에서 객체(클래스)를 생성할 때 특정한 패턴을 발견하게 되었다.
상수
멤버
생성자 (의존성 주입)
메서드
잘보고갑니다!