포스트

2021-02-16-TIL

2021-02-16-TIL

조건 분기 없이 커맨드 실행하기

Map<String, Runnable> 로 조건 분기문 없이 커맨드를 실행할 수 있다.

콘솔 프로그램에서 입력 명령마다 다른 동작을 하려면 보통 if-else나 switch를 길게 쓴다. 명령이 늘어날수록 분기문도 길어지고, 명령을 추가할 때마다 그 분기문을 고쳐야 한다. Runnable은 인자도 반환값도 없는 run() 메서드 하나만 가진 함수형 인터페이스라서 람다로 바로 만들 수 있다. 명령 문자열을 키로, 실행할 동작을 값으로 Map에 담아 두면 분기문 대신 조회 한 번으로 실행할 동작을 찾는다.

1
2
3
4
5
6
7
Map<String, Runnable> commands = new HashMap<>();
commands.put("start", () -> game.start());
commands.put("end", () -> game.end());
commands.put("status", () -> printStatus());

commands.getOrDefault(input, () -> System.out.println("알 수 없는 명령"))
        .run();

새 명령을 추가할 때는 put 한 줄만 늘리면 되고, 기존 분기 로직은 건드리지 않는다. 동작에 인자가 필요하면 Consumer<T>나 직접 정의한 함수형 인터페이스를 값으로 쓰면 된다.


체스 미션에서 생각해 볼 것

black인데 white_representation 인 폰이 생성되면?

색과 표현 문자를 따로 받아 생성할 수 있으면, 서로 맞지 않는 조합의 객체가 만들어질 수 있다. 색을 받으면 표현 문자가 거기서 결정되도록 생성 경로를 하나로 묶으면 이런 잘못된 상태를 처음부터 만들 수 없다.


스터디와 코드 리뷰

1000문제 풀면 카카오 뽑힌다. TIL 쓰면 뽑힌다.

Dong과 함께 알고리즘 스터디를 개설했다.

코드리뷰를 하면서 많은 것을 배웠다. 다른 사람의 리뷰와 코드를 보면서 많이 배워야겠다.


닫힌 풀 리퀘스트 다시 열기

클로즈된 풀리퀘스트를 어떻게 다시 열수있나?

reopen 하거나 브랜치를 따로 만들어서 옮겨서 pr

브랜치당 pr은 하나!!

브랜치는 아무리 많이 만들어도 상관없으니 백업하고 수행

풀 리퀘스트는 특정 브랜치(head 브랜치)를 기준으로 열린다. GitHub 문서에 따르면 PR을 연 뒤에도 head 브랜치에 새 커밋을 추가하면서 변경을 이어 갈 수 있다. 다시 말해 그 브랜치에 푸시한 커밋은 모두 그 PR에 들어간다. 그래서 한 브랜치에서 서로 다른 작업을 섞으면 PR의 범위도 섞인다. 작업마다 브랜치를 따로 만들어 PR을 하나씩 대응시키면 리뷰 범위가 분명해진다.

브랜치는 커밋을 가리키는 가벼운 이름이라 얼마든지 만들 수 있다. 리베이스나 강제 이동처럼 이력을 바꾸는 작업을 하기 전에 현재 위치에 백업 브랜치를 하나 만들어 두면, 잘못되었을 때 그 브랜치로 돌아갈 수 있다.

참고한 자료외부 출처 3

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다