Dailelog

우테코 7기 프리코스 1주차 회고 본문

활동

우테코 7기 프리코스 1주차 회고

Daile 2024. 10. 22. 11:46

이글은 10월 22일 화요일 11시에 작석하는 글입니다. 저는 방금 전공인 ai프로그래밍 수업 중간고사 시험을 치고 이글을 작성하고 있습니다. 지금 프리코스가 시작되고 1주일이 지났습니다. 저의 1주차 결과는 예제 테스트 2개중 2개다 통과하였습니다.

코드나 요구사항에 대해서 글로 작성할 수 있는지 여부를 몰라서 프리코스를 진행할 때 제가 작성한 README.md와 1주차를 진행하면서 들었던 생각과 고민했던 사항들 그리고 그러한 고민 중 어떤 방식을 사용했는지에 대한 이야기를 할 생각입니다.

 

README.md

## 기능 구현 목록
- [ ] 시작 문구 출력 기능
- [ ] 커스텀 문자열 입력 시 구분자 추가 기능
- [ ] 사용자로 부터 문자열 입력받기
- [ ] 사용자로 부터 받은 문자열 숫자와 구분자로 나누는 기능
- [ ] 숫자들의 합산 기능
- [ ] 결과 출력하기 

## 예외 사항 처리 목록
- [ ] 입력 문자열에 구분자와 숫자를 제외한 다른 캐릭터가 존재하는 경우

 

프리코스 1주차 미션에서 구현해야할 기능 목록을 정리하고 추후 github에 커밋을 할때 기능 단위로 커밋을 하라는 요구사항이 있었습니다.저도 평소에 기능단위로 커밋을 하지만 평소에 제가하는 기능의 단위보다 더 작게 잡아서 실수를 줄이기 위해 노력했습니다. 

 

고민사항

1.커스텀 구분자 기능에 구분자를 한개가 아닌 여러가지를 추가할 수 있게 해야하는지 고민했습니다

덧셈할 문자열을 입력해 주세요.
//+_\\n1+4+_6_5
결과 : 16

 

처음에는 여러가지 캐릭터를 받을 수 있게 만들었습니다. 하지만 만약 ab를 커스텀 구분자로 하는 경우 a와 b를 각각 커스텀 구분자로 등록하기 때문에 문자열을 1개의 구분자로 받는것이 기능적으로 더 적합하다는 생각을 해서 현재는 // \n 사이에 오는 문자열 각각을 다 구분자로 등록되게 할지 아니면 사이에문자열 전체를 한개의 구분자로 받을지 고민됩니다. 결국 “//”와 “\n” 사이에 문자열 전체를 한개의 구분자로 만들었습니다.

//ab\\n1ab2
결과 : 3
//ab\\n1a2
Exception in thread "main" java.lang.IllegalArgumentException: [ERROR] 구분자와 숫자만 입력해주세요

 

2.커스텀 구분자 기능에 숫자도 구분자로 사용이 가능 하게 해야하는 것인지 고민했습니다.

덧셈할 문자열을 입력해 주세요.
//1\\n21315
결과 : 10

가능하게 만들었습니다.

 

3.양수에 소수를 포함해야하는가?

양수란?

양의 부호가 붙은 수로 0보다 큰수다. 앞에 부호(+)를 생략할 수 있다. - 위키백과

처음에는 양수를 보고 당연하기 input가 음수인지만을 상정하고 프로그래밍 했습니다. 하지만 소수 또한 양수에 포함되기 때문에 양수인 소수를 포함하기로 결정했습니다.

 

4. 리팩토링이란 정확히 무엇인 단순히 코드를 까끔하게 하는 것인가 어디까지 해야하는지?

리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. - 위키백과

이 고민은 계속해서 고민하고 답을 찾아내고 싶습니다.

 

 

5.합산기능은 Numbers 클래스 에서 담당하는데 생성자에서 처리해줄지 아니면 별도에 메서드로 구현할지 고민하였습니다. 

결론은 별도에 합을 구하는 메서드를 구현했습니다. 이 상황이 취향의 문제인지 아니면 권장하는 방식 존재하는 궁금해졌습니다.

 

문제발생

 “|”, “*”, “^” 등의 특수문자는 \\를 붙여야 split() 함수의 인자로 적용가능하다 

    public List<Integer> getNumberList(String readString) {
        List<Integer> numberList = new ArrayList<>();
        String numberString = readString;
        if(hasCustomSeparator(readString)){
            addCustomSeparator(readString);
            numberString = getNumberString(readString);
        }
        String[] split = numberString.split(symbols);
        try{
            for(String s : split){
                int i = Integer.parseInt(s);
                numberList.add(i);
            }
        }catch (Exception e){
            throw new IllegalArgumentException("[ERROR] 구분자와 숫자만 입력해주세요");
        }
        return numberList;
    }
public Numbers getNumberList(String readString) {
        String numberString = readString;
        if(hasCustomSeparator(readString)){
            addCustomSeparator(readString);
            numberString = getNumberString(readString);
        }
        List<Integer> numberList = split(numberString);
        return new Numbers(numberList);
    }

    private List<Integer> split(String numberString) {
        List<Integer> numberList = new ArrayList<>();
        String[] symbolArray = symbols.split("");
        String replaceString = numberString;
        for (String symbol : symbolArray) {
            replaceString = replaceString.replace(symbol, COMMA);
        }
        String[] numberArray = replaceString.split(COMMA);
        try{
            for(String s : numberArray){
                int i = Integer.parseInt(s);
                numberList.add(i);
            }
        }catch (Exception e){
            throw new IllegalArgumentException("[ERROR] 구분자와 숫자만 입력해주세요");
        }
        return numberList;
    }

 

하지만 결국 커스텀 구분자로 구분하는 것은 다른 방식으로 코드를 수정했습니다.

 

test

테스트의 목적은 기능이 제데로 작동하는 지와 예외처리가 잘되는지 확인 하는 작업이라고 생각합니다.

고민 1 privat 함수를 테스트 할경우 어떻게 해야하는가?

객체 내부에서 만 사용하는 함수를 테스트 하게 되면 문제가 발생할거 같다는 생각을 하게 되었습니다.

  if(hasCustomSeparator(readString)){
            symbols = addCustomSeparator(readString);
            numberString = getNumberString(readString);
        }

위 코드에서 hasCustomSeparator의 결과에 따라 addCustomSeparator를 실해하는 데 처음에 테스트 하기 위해

public 로 수정했었다 지금은 다시 private 로 수정했습나다. 커스텀 구분자가 존재하는 여부를 확인하고 있다면 추가하는 방식으로

구성했기 때문에 addCustomSeparator를 public로 만들면 오류가 발행할 확률이 크기 때문에 수정했는데 그럼 어떻게 테스트를 작성해야하는 의문이 들게 되었습니다.

 

제가 한 것들이 맞는지 검증하고 아직 스스로 답을 내리지 못한 고민사항들도 계속해서 답을 찾아 나갈 예정입니다.

 

과제 진행 소감

1주차를 진행하면서 의도와 왜라는 질문을 계속할려고 노력했습니다. 주어진 요구사항들의 구현하면서 왜 이방법을 선택했는지 어떤 방법들을 생각했는지를 고민하면서 저의 부족한점을 인지할 수 있었습니다. 특히 평소에 왜라는 질문에 "그냥"이라고 대답했던 저의 과거가 부끄러워 졌습니다. 기능을 수행하는 것 뿐아니라 여러 관점에서 개선점이 존재 할수 있다는 점이 재미를 느낄 수 있었습니다. 남은 프리코스를 진행 하면서 더욱 성장하고 싶다는 생각을 했고 우아한 테크 코스에서 다른 사람들과 이러한 고민을 같이 하면서 성장하고 싶습니다.

 

제가 작성한 코드가 궁금하시면 아래의 레포지토리 링크를 통해 확인해주세요

https://github.com/BaSak0630/java-calculator-7

 

GitHub - BaSak0630/java-calculator-7

Contribute to BaSak0630/java-calculator-7 development by creating an account on GitHub.

github.com

 

 

LIST

'활동' 카테고리의 다른 글

우테코 프리코스 3,4주차  (2) 2024.11.15
우테코 프리코스 1주차 나의 코드리뷰  (0) 2024.10.25
우테코 프리코스 - 1 주차 시작  (0) 2024.10.17
BITs - 테크톡  (3) 2024.04.09