JAVA
java
-
[CleanCode] 8장 경계
🔹 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다.오픈소스를 이용하거나, 사내 다른 팀이 제공하는 컴포넌트를 이용하거나, 어떤 식으로든 이 외부 코드를 우리 코드에 깔끔하게 통합해야 한다. 이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다. 외부 코드 사용하기 💻 java.util.Map 위와 같은 경우 Map이 반환하는 Object를 올바른 유형으로 변환할 책임은 Map을 사용하는 클라이언트에게 있다. 이 방식 보다는 아래와 같이 제네릭을 사용하는 것이 좋다. 그렇지만 이 방법도 사용자에게 필요하지 않은 기능까지 제공한다는 문제를 해결하지는 못한다. 조금 더 깔끔하게 아래와 같이 제네릭스의 사용 여부를 Sensors 안에서 결정하면 어떨까? 경계 인터페이스인 Map을 Sensors 클래스 안으로 숨긴다. 따라서 Map 인터페이스가 변하더라도 나머지 프로그램에는 영향을 미치지 않는다. 제네릭스를 사용하든 하지 않든 더이상 문제가 안 된다.…
-
[CleanCode] 7장 오류 처리
오류 코드와 깨끗한 코드오류 처리는 중요하다.하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 이 장에서는 고상하게 오류를 처리하는 기법과 고려사항 몇 가지를 소개한다. 오류 코드보다 예외를 사용하라 Try-Catch-Finally 문부터 작성하라 다음은 파일이 없으면 예외를 던지는지 알아보는 단위 테스트다.단위 테스트에 맞춰 다음 코드를 구현했다.그런데 코드가 예외를 던지지 않으므로 단위 테스트는 실패한다. 잘못된 파일 접근을 시도하게 구현을 변경하자. 아래 코드는 예외를 던진다.코드가 예외를 던지므로 이제는 테스트가 성공한다. 이 시점에서 리팩터링이 가능하다. catch 블록에서 예외 유형을 좁혀 실제로 FileInputStream 생성자가 던지는FileNotFoundException을 잡아낸다. 미확인 unchecked 예외를 사용하라 자바에서 처음으로 Checked Exception을 지원한 당시는 확인된 예외를 멋진 아이디어라 생각했다. 실제로도 확인된 예외는 몇가지 장점을 제공한다. 하지만 지금은 안정적인 소프트웨어를 제작하는…
-
[CleanCode] 6장 객체와 자료 구조
자료 추상화 자료/객체 비대칭 자료 구조를 사용하는 절차적인 코드는 기본 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 디미터 법칙 final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath(); Oprions opts = ctxt.getOptions();File scatchDir = opts.getScratchDir();final String outputDir = scratchDir.getAbsolutePath(); 참고 링크
-
[CleanCode] 5장 형식 맞추기
형식을 맞추는 목적 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기위한 간단한 규칙을 정의하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 적절한 행 길이를 유지하라 팀 규칙 밥 아저씨의 형식 규칙
-
[CleanCode] 4장 주석
브라이언 W. 커니헨, P.J. 플라우거“나쁜 코드에 주석을 달지 마라. 새로 짜라.” 잘 달린 주석은 그 어떤 정보보다 유용하다. 그러나 우리가 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면 주석은 필요하지 않다.그러므로 주석이 필요하면 상황을 역전해 코드로 의도를 표현할 방법은 없는지 생각하자! 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 부정확한 주석은 독자를 현혹하고 오도한다. 더 이상 지킬 필요가 없는 규칙이나 지켜서는 안 되는 규칙을 명시한다. 코드는 자신이 하는 일을 진실되게 말한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 그러므로 우리는 (간혹 필요할지라도) 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 어떤 주석은 필요하거나 유익하다.
-
[CleanCode] 3장 함수
함수를 만드는 첫째 규칙은 ‘작게!’다. 함수를 만드는 둘째 규칙은 ‘더 작게!’다. Circle makeCircle(Point center, double radius);
-
[CleanCode] 2장 의미 있는 이름
💡 의미가 분명한 긴 이름을 추구하되, 불필요한 정보를 중복 추가하지 마라.
-
[CleanCode] 1장 깨끗한 코드
궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
-
onClick 이벤트에서 this 로 객체 가져오기
-
[EffectiveJava] 12장 직렬화
85. 자바 직렬화의 대안을 찾으라 86. Serializable을 구현할지는 신중히 결정하라 87. 커스텀 직렬화 형태를 고려해보라 88. readObject 메서드는 방어적으로 작성하라 89. 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라 90. 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라