자바칩
[우아한테크코스 프리코스] 1주차 미션 해결 과정 (부제: STS에서 dependencies가 인식이 되지 않는다면) 본문
[우아한테크코스 프리코스] 1주차 미션 해결 과정 (부제: STS에서 dependencies가 인식이 되지 않는다면)
아기제이 2024. 10. 19. 06:54Java 버전 21을 쓰기 위해서는 Gradle 버전 8.0 이상을 써야 호환이 가능하다.
하지만 이렇게 Gradle Wrapper에서 버전을 변경한다고 해도 시스템에 설치된 Gradle 버전 자체는 변경되지 않는다.
- 시스템에 설치된 Gradle은 gradle 명령어로 호출
- Gradle Wrapper는 gradlew 명령어로 호출
그러므로 시스템의 설치된 gradle과 gradle wrapper의 버전이 다른데, gradle wrapper 버전을 사용하고 싶다면 gradlew 명령어로 호출하면 된다.
camp.nextstep.edu.missionutils.test.NsTest import가 안된다..
dependencies {
implementation 'com.github.woowacourse-projects:mission-utils:1.0.0'
}
이걸 분명히 했는데 왜 안될까?
GitHub - woowacourse-projects/mission-utils
Contribute to woowacourse-projects/mission-utils development by creating an account on GitHub.
github.com
분명 이 링크에 있는 설정 그대로 해놨는데...
해결 방법
C:\Users\{사용자명}\.gradle\caches\modules-2\files-2.1
여기 있는 외부 dependencies를 적용 못하는 이슈이다........
원래 이게 자동으로 적용이 되어야하는데 얘가 인식을 못해서 나는 그냥 수동으로 jar 파일을 적용시켰다.
프로젝트 우클릭 - Build Path - Configure Build Path - Add External JARs
여기에서 프로젝트에 사용하는 dependencies에 해당하는 우테코 제공 라이브러리 jar 파일을 직접 추가했다.
만약 depencies가 인식이 안되는 분이 계시다면 이렇게 수동으로 추가해보는 것도 나쁘지 않은 선택같다.

...사실 위의 과정은 할 필요가 없었다.
내가 숫자 계산기 말고 숫자 야구 프로젝트를 다운 받아서 그런 것이었다. (바보인증)
하지만 덕분에 dependencies가 추가가 되지 않을 때 수동으로 추가할 수 있다는 점을 새로 알게 되었다.
혹시 나같은 사람들이 또 생길까봐 부제로 추가를 해두었다.
여기서부터 진짜 미션 시작
요구사항은 생각보다 간단하다.
하지만 나는 클린 코드 작성법을 배웠으니까 절대로 main에 모든 기능을 다 때려넣지 않을 것이다.
객체 지향 SOLID 원칙 중에서 '클래스당 한 가지의 책임만 가져야 하는 단일 책임 원칙(SRP)'이 있다.
기능 별로 클래스나 메서드를 분리하는 것이 결합도를 낮춰주어서 좋은 코드라고 할 수 있다.
그래서 나는 모든 기능들을 잘게 클래스와 메서드로 쪼갤 것이다.
또한, 의존 역전 원칙(DIP)에 의하여 구현 클래스에 의존시키지 않고, 인터페이스를 의존시킬 것이다.
구현체끼리는 서로 어떤 기능인지 몰라야 한다. 인터페이스만 넘겨주면 된다.
이는 OCP(개방-폐쇄 원칙)에도 해당이 된다.
아래와 같은 구조로 구현하였다.

클래스의 책임을 분산시켜 단일 책임 원칙(SRP)을 준수하고, 인터페이스를 공개하며 구현체는 은닉하여 개방-폐쇄 원칙(OCP)을 적용하였다. 이를 통해 코드가 인터페이스에만 의존하도록 설계했다.(의존 역전 원칙, DIP)
이러한 설계를 통해 인터페이스에만 의존하더라도 구현체의 기능을 효과적으로 활용할 수 있다.(리스코프 치환 원칙, LSP) 또한, 클라이언트는 Input 인터페이스 하나에만 의존함으로써 인터페이스 분리 원칙(ISP)을 따르면서도 원하는 결과를 쉽게 얻을 수 있다.
SOLID 원칙은 아래와 같다.
- 단일 책임 원칙 (SRP): 각 클래스는 하나의 책임만 가지도록 설계하였습니다. 이를 통해 코드의 가독성과 유지보수성을 높였습니다.
- 개방-폐쇄 원칙 (OCP): 인터페이스를 통해 기능을 정의하고, 구현체는 외부에 노출되지 않도록 하였습니다. 이로써 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있습니다.
- 리스코프 치환 원칙 (LSP): 인터페이스를 통해 정의된 기능을 다양한 구현체가 제공할 수 있도록 하여, 클라이언트가 특정 구현체에 의존하지 않고도 기능을 제대로 활용할 수 있습니다.
- 인터페이스 분리 원칙 (ISP): 클라이언트는 필요한 인터페이스만을 의존함으로써, 복잡한 의존성을 줄이고 사용 편의성을 높였습니다.
- 의존 역전 원칙 (DIP): 구현체가 아닌 인터페이스에 의존하도록 하여, 코드의 유연성을 높였습니다. 클라이언트는 구체적인 구현에 의존하지 않고 인터페이스에만 의존합니다
모두 만족하지 않는가?
코드는 1주차 미션이 종료되면 올릴 것이다.
아래 링크에서 커밋 메시지를 작성하는 법을 익히고, 기능 별로 커밋을 해야겠다.
https://gist.github.com/stephenparish/9941e89d80e2bc58a153
Git Commit Message Conventions
Git Commit Message Conventions. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
우테코 사이트의 문제점을 발견했다.
우테코 지원하기에서 로그인할 때 맞는 비밀번호를 입력해도 계속 이메일과 비밀번호를 확인해달라고 뜬다..
내가 잘못 입력한 것이 아니라 진짜로 똑같은 이메일과 비밀번호로 로그인을 몇번이나 시도를 해야 그제서야 로그인이 된다.
원인은 불안정한 와이파이(비밀번호가 걸려있지 않은 공개 와이파이) 때문이었다.
하지만 다른 사이트에서는 공개 와이파이로 로그인이 잘만 되는데 우테코 사이트만 이런거면 개선이 필요하다고 생각한다.
'우아한테크코스 > 프리코스' 카테고리의 다른 글
[우아한테크코스 프리코스] 회고, 4주차 미션 진행 소감 (3) | 2024.11.12 |
---|---|
[우아한테크코스 프리코스] 코드리뷰를 처음으로 해본 소감 (0) | 2024.11.06 |
[우아한테크코스 프리코스] 3주차 미션 진행 소감 (0) | 2024.11.05 |
[우아한테크코스 프리코스] 회고, 2주차 미션 진행 소감 (4) | 2024.10.28 |
[우아한테크코스 프리코스] 1주차 미션 진행 소감 (1) | 2024.10.21 |