🏁 서론
요즘 취준만 하느라 뭔가 흐리멍덩하게 시간을 보내고 있다는 느낌이 들어서, 의식적으로 개발 리듬을 다시 잡고자 스터디를 시작했다. 이번에 참여하게 된 건 초록 스터디라는 곳인데, 단순히 과제를 제출하는 게 아니라 PR을 올리고, 테스트 코드를 작성하고, 클린 코드와 설계에 대한 피드백까지 주고받는 구조라는 점이 마음에 들어서 신청하게 되었다.
https://cho-log.notion.site/1c81a5419760805fb2e9d99d53ab73f2
🌿 초록해듀오 | 함께 배우고 성장하는 개발 스터디 | Notion
초록해듀오란?
cho-log.notion.site
📚 이번 주 학습 내용
https://github.com/izzy80/java-calculator-unit-playground/tree/step1
GitHub - izzy80/java-calculator-unit-playground: 초록 스터디 자바 기초 과정 계산기 미션을 위한 저장소
초록 스터디 자바 기초 과정 계산기 미션을 위한 저장소. Contribute to izzy80/java-calculator-unit-playground development by creating an account on GitHub.
github.com
🛠️ 단계별 PR 회고
1. 요구사항은 꼭 지키기
👀눈을 크게 뜨고 글을 잘 읽어보자~~
2. var (java 10+)
이번 과제에서는 테스트 코드에서 다음과 같이 var 키워드를 사용했다.
그런데 리뷰어님께서 “var를 언제, 왜 사용하는지”에 대해 질문을 주셨고, 이걸 계기로 var 사용에 대한 생각을 정리해보게 되었다.
사실, java-learning-test 예제를 참고하며 처음으로 var를 써봤다. 그래서 var에 대해 궁금해져서 찾아봤다.
지역 변수의 타입 추론을 위한 키워드
변수 선언시, 타입을 생략 가능
장점 : 가독성 향상, 유지 보수성 증가, 코드 간소화
단점 : 잘못된 타입 추론, 코드 분석의 어려움
그리고 리뷰어님 의견에 따르면, 개인적으로 반환하는 값을 변수로 잠시 빼둘 때는 var로 선언하고, 나머지는 타입에 맞춰 쓰는 편이라고 했다.
3. 객체의 메소드 vs static 메소드
객체 메서드
- 객체의 상태를 참조하거나 변경하는 경우에 사용
- 캡슐화와 정보 은닉에 유리하며, 객체 지향 설계 원칙에 더 적합
장점
1. 객체 지향 프로그래밍의 철학에 부합
2. 다형성, 오버라이딩 등으로 유연한 확장 가능
3. 캡슐화, 협력 설계가 용이
단점
1. 객체 생성을 따로 해줘야 하므로 오버헤드 발생
- JVM은 불필요한 객체 생성을 GC로 해결
2. 계산만 하는 간단한 작업이라면 오히려 불필요하게 느껴질 수 있음
static 메서드
- 객체의 상태와 무관한 연산에 적합
- 대표적으로 유틸리티, 팩토리 메서드 등에 많이 사용
장점
1. 객체 생성 없이 바로 호출 가능 → 코드 간결
2. 설정 초기화, 단순 기능 제공 등에 유용
단점
1. 객체 지향 설계 원칙에 위배될 수 있음
2. 다형성과 오버라이딩 불가 → 테스트나 확장에 불리함
4. No newline at end of file
Github의 빨간색 경고 아이콘
-> 파일의 가장 마지막 줄에는 개행이 있어야한다는 경고
왜?
Unix 계열 시스템(POSIX)에서는
모든 텍스트 파일의 마지막 줄은 개행 문자로 끝나야 한다고 정의하고 있다.
이는 텍스트 파일을 라인 단위로 처리하기 위한 전통적인 기준
- 개행 문자로 끝나지 않으면 마지막 줄이 “완전한 줄(line)”로 인식되지 않는다.
- 일부 컴파일러, diff 도구, Git 등에서 예상치 못한 차이(diff)나 충돌이 발생할 수 있다.
5. 사용하지 않는 코드는 제거
사용하지 않는 코드를 주석으로 남겼는데 주석도 지우는 편이 좋다
6. 단일 책임 원칙(SRP)
처음엔 sum() 메서드 하나로 문자열 계산기의 모든 기능을 처리하도록 구현했다.
- 문자열을 split하고
- 정수 리스트로 변환하고
- 커스텀 구분자를 해석하고
- 숫자를 더하고
- 유효하지 않은 입력에 대한 예외 처리까지...
하나의 메서드가 너무 많은 역할을 하게 되어서 리뷰어님이 SRP에 의해서 메소드를 쪼개자고 제안해주셨다.
메소드를 너무 무겁게 가져가지 말자~
7. 메소드명에 예외처리는 포함하지 말기
` int parseIntOrThrow (String token)` String을 받아서 숫자로 변환하는데 못하면 예외를 던지는 메소드이다.
메소드명에 Throw를 넣었는데 리뷰어님이 "예외처리에 대한 부분까지는 메소드명으로 드러낼 필요는 없을 것 같다" 라고 리뷰를 달아주셨다.
그래서 메소드명명 규칙에 대해 찾아봤는데 예외에 대한 내용을 넣지는 않는 것 같다.
8. private
내부에서만 사용되는 메소드이면 private 접근제어자를 사용하자!
접근 제어자를 명시하지 않으면 Java에서는 default(package-private)가 적용되어, 같은 패키지 내에서는 어디서든 접근 가능하다. 즉, 내가 의도하지 않은 곳에서도 해당 메서드가 노출되고, 불필요하게 개발자에게 잘못된 사용 가능성을 열어주는 결과를 만들 수 있다는 의미다.
📝 마무리 회고
Java 코스와 Spring 코스 중 무엇부터 시작할지 고민했지만, 익숙하면서도 아직 완전히 손에 익지 않았던 Java부터 시작하기로 결정했다. 결과적으로는 정말 잘한 선택이었다! 간단한 문자열 계산기를 직접 구현해보면서 기초지만 절대 가볍게 넘어가면 안 되는 중요한 개념들을 몸으로 익힐 수 있었다. 작지만 의미 있는 피드백 하나하나가 코드를 더 깊이 있게 바라보게 해준 것 같다. 💪 💪
🔗 Pull Request 기록
'🌤️일상 > 초록 스터디' 카테고리의 다른 글
2주차) 자동차 경주 회고 (1) | 2025.05.13 |
---|