Dev/Java

Dev/Java

[SOLID] 좋은 객체지향 설계의 5가지 원칙

단일 책임 원칙 (SRP, single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예) UI 변경, 객체의 생성과 사용을 분리 개방-폐쇄 원칙 (OCP, Open/closed principle) ⭐️⭐️⭐️ 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용하여 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현한다. OCP의 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택한다. 구현 객체를 변경하려면 클..

Dev/Java

[Java] isPresent() vs. ifPresent()

회원가입 로직을 구현하던 중 ifPresent()를 사용하게 되었다. 나중에 요긴하게 쓸 것 같아 정리하려고 한다. isPresent() boolean 타입 Optional 객체가 값을 가지고 있으면 true, 없으면 false를 반환한다. ifPresent() void 타입 Optional 객체가 값을 가지고 있으면 실행, 없으면 넘어간다. 회원가입을 하는 과정에서 같은 이름이 있으면 ifPresent()를 사용하여 예외를 발생시키는 코드이다. 참고 https://sin0824.tistory.com/25

Dev/Java

[Java] pickNumberInRange ArrayIndexOutOfBoundsException

우테코 menu 문제 기능 구현을 끝내고 테스트 코드를 돌렸는데 위 에러가 떴다. 여기서 의문이 든 게 나는 pickNumberInRange 범위를 0에서 4로 맞춰놨기 때문에 5가 나올 수 없는 구조였다. 도대체 어디서 날아온 건가.. 구글링으로도 답을 못 찾다가 20분 삽질로 원인을 찾아냈다. 테스트 코드에서 5를 넘겨주고 있다.. 당연히 5가 넘어올 수밖에 없는 상황이었다.. 도저히 5의 출처를 못 찾겠어서 설마 테스트 코드에서 넘어오는 건가 하고 확인해 보니 설마가 맞았다. 우테코에서 제시한 테스트 코드를 써야했기 때문에 발생한 특수한 문제같다. 이런 경우가 또 생길지는 모르겠지만 기억하고 있어야겠다.

Dev/Java

[Java] IllegalArgumentException vs. IllegalStateException

요즘 코드를 작성하면서 예외처리에 집중했는데, 그 과정에서 IllegalArgumentException를 매우 매우 자주 작성했다. 그러다 보니 IllegalStateException가 있다는 건 알고 있는데 언제 쓰는 거지? 라는 생각이 들며 궁금해졌다. 그래서 두 예외의 차이를 찾아보았다. IllegalArgumentException 적절하지 않거나 유효하지 않은 데이터를 받았을 때 발생되는 예외 양수를 파라미터로 기대하고 있었는데 음수가 넘어왔을 때나 API를 통해 넘어온 값이 올바르지 않을 때 발생 (파라미터에 따른 예외처리를 많이 하기 때문에 이 예외를 훨씬 자주 쓰는 듯 하다) IllegalStateException 죽은 스레드로부터 불려지는 경우와 같이 불려져서는 안될 시간에 메소드가 호출될..

Dev/Java

[Java] IntelliJ 프로젝트 빌드 안 될 때 (Link Gradle Project)

깃에서 프로젝트를 클론 받은 후 인텔리제이로 파일을 열었는데 프로젝트가 빌드되지 않는 문제가 발생했다. 아예 자바 파일을 인식하지 못 하는 모습.. JDK 문제로 Gradle이 제대로 임포트 되지 않아서 발생하는 문제 같았다. 예전에도 겪었던 문제 같은데 다음부턴 잊지 않고 대처하기 위해 적어두려고 한다! (밑에 나오는 방법은 맥북 기준이다) 먼저 File > Project Structure > Project Settings > Project로 들어간다. 여기서 SDK와 Language level을 설정해 준다. 나는 우테코에서 요구하는 11 버전으로 맞춰주었다. 바로 밑에 있는 Moduls로 들어가 Language level을 위에서 선택한 버전으로 맞추어준다. 그리고 같은 창에 있는 Paltform ..

Dev/Java

[Java] 예외 테스트 코드가 실행되지 않을 때 (try-catch)

요즘 내 코드가 클린하지 못하다는 생각이 들어 작년 우아한 테크코스 문제를 풀어보고 있다. 2주 차 로또 문제의 필수 기능을 구현한 후 테스트 코드를 돌렸는데 해당 테스트 코드가 돌아가지 않았다. ERROR_MESSAGE는 "[ERROR]"이고, 예외를 던졌을 때 "[ERROR]"를 포함하고 있으면 되는 테스트 코드였다. 하지만 나는 로또 문제를 풀면서 생성되는 모든 에러에 [ERROR]를 붙여놨기 때문에 무엇이 원인인지 파악하기 힘들었다.. 그리고 30분 정도 구글링을 해서 문제점을 찾은 결과, 테스트 코드에서 내가 던진 예외를 못 받고 있었다. 즉, new로 생성된 에러를 잡아줄 catch문이 없었다.. 위처럼 에러를 생성해서 던지고 있는데 이 에러를 받아줄 catch 구문이 없었다... 때문에 여기..

Dev/Java

[Java] 일급 컬렉션(First Class Collection)이란?

객체지향설계 스터디를 참여하면서 정말 정말 부족한 점이 많다는 것을 깨닫고 있다. 특히 나는 객체지향적인 코드와 거리가 아주 먼 코드를 작성하고 있었다.. 덕분에 스터디가 많은 도움이 되고 있으며 이것들을 놓치지 않기 위해 정리하고자 한다. 그중 지난주 스터디에서 제일 많이 들은 일급 컬렉션을 정리하고자 한다. 일급 컬렉션이란? Colletion을 Wrapping 하면서, Colletion 외의 다른 멤버 변수가 없는 상태를 일급 컬렉션이라고 한다. 일급 컬렉션이란 단어는 '소트웍스 앤솔로지'의 객체지향 생활체조 파트에서 언급이 되어있습니다. 규칙 8 일급 컬렉션 사용이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 ..

yo0oni
'Dev/Java' 카테고리의 글 목록 (2 Page)