본문 바로가기
[Design Pattern/Java] toString 메소드는 항상 오버라이드 하자.  안녕하세요 돼지왕 왕돼지입니다. 오늘은 "toString 메소드는 항상 오버라이드 하자" 를 주제로 이야기 해보겠습니다. 이 글은 "Effective Java" 를 정리한 내용입니다. - java.lang.Object 클래스는 toString 메소드를 구현하고 있다. 그러나 그 메소드에서 반환하는 문자열은 클래스 사용자가 원하는 형태가 아니다. ( 보통 클래스명@hashCode 형태 ) - toString() 은 println, printf, 문자열 접합 연산자 +, assert, debugger 출력 등에 쓰일 경우 자동 호출된다. toString 도 보편적 계약이 있어? - 응. "간결해야 하고, 사람이 읽기 쉬운 형태의 정보를 표현해야 한다" 라는 계약이 있어. - 추가적으로, "모든 서브 클래.. 2012. 3. 12.
[Clean Code] 냄새와 발견법 Red : 냄새 Blue : 권장사항 1. 주석 ○ 부적절한 정보 주석. - 코드와 설계에 기술적인 설명을 하거나, 메타 정보를 기술한 것을 제외하고는 대부분이 부적절한 정보이다. ○ 쓸모없는 주석. - 오래된 주석( 유지 보수 없는.. ), 엉뚱한 주석, 잘못된 주석은 필요 없다. ○ 중복된 주석. ○ 성의없는 주석. - 내용이 모호하거나, 별 기능을 못하는 주석. ○ 주석 처리된 코드. - SVN 같은 코드 관리 시스템으로 관리하라. 2. 환경 ○ 빌드에 여러 단계가 걸린다. ○ 테스트에 여러 단계가 걸린다. 3. 함수 ○ 너무 많은 인수 - 없는 것이 가장 좋고, 하나는 봐줄만 하다. 넷 이상부터는 절대 피하는것이 좋다. ○ 출력인수. - 인수를 전달할 때는 보통 입력으로 간주한다. 입력의 상태를 .. 2012. 2. 28.
[Clean Code] 클래스 ○ 클래스는 캡슐화 ( encapsulation ) 을 잘 활용한다. ○ 클래스는 작아야 한다. - 코드 라인도 적거니와 단일 책임 원칙, single responsibility principle( SRP ) 을 지켜야 한다. ○ 클래스는 응집도가 커야 한다. - 메소드와 변수가 서로 의존하며 논리적 단위로 묶인다는 의미. - 응집도가 낮은 녀석들은 다른 클래스로 뺄 수 있다. ○ 추상화를 잘 활용하면 변경이 쉽다. 2012. 2. 28.
[Clean Code] 형식 ☆ 형식을 맞추는 목적 - 코드는 혼자 짜는 경우가 적다. 의사소통과 서로의 코드에 대한 가독성 등을 고려했을 때 통일된 형식을 지키는 것이 좋다. ☆ 적절한 행 길이를 유지하라. - 클래스와 함수 등은 최대한 짧은 것이 좋다. ☆ 신문기사처럼 작성하라. - 신문기사처럼 읽어내려가는 형식으로, 중요한 것 ( 헤드라인 ) 은 가장 윗쪽에 오도록 배치한다. ☆ 개념은 빈 행으로 분리하라. ☆ 세로 밀집도를 높이고, 수직 거리는 줄여라. - 의미 없는 주석 등으로 연관성 있는 코드들을 떨어뜨리지 말라. - 비슷한 개념의 것. 종속 함수 등은 가까이에 배치하라. ☆ 변수선언은 그 변수를 사용하는 곳의 가장 가까운 곳에서 선언하라. ☆ 인스턴스 변수 ( member 변수 ) 는 상단에 모아서 선언하라. ☆ 가로 .. 2012. 2. 28.
[Clean Code] 주석. ♧ 주석은 나쁜 코드를 보완하지 못한다. ♧ 주석 대신 코드로 의도를 표현하라. ♧ 좋은 주석은 매우 한정적이다. - 법적인 주석 ( Copyright 등 기술 ) - 정보를 제공하는 주석 ( kk:mm:ss 형식 ) - 의도를 설명하는 주석 ( 한번에 이해하기 어려운 알고리즘 등을 설명 ) - 의미를 명료하게 밝히는 주석 ( API 자체가 잘못설계되어 이해가 어려울 때 이를 보충해주는 주석 ) - 결과를 경고하는 주석 ( API 형태로. 사용자에게 경고를 함. i.e) 오래 걸리는 작업처리. not-thread-safe ) - TODO 주석 - 중요성을 강조하는 주석 ( 직관적으로는 중요하지 않아서 삭제되거나 편집될 수 있는 부분을 경고 ) - 공개 API 의 Javadoc 형태 ♧ 나쁜 주석 - 별 .. 2012. 2. 28.
[Clean Code] 함수 ◇ 작게 만들어라 - 첫번째 규칙은 작게. 두번째 규칙도 작게. ◇ 블록과 들여쓰기를 확실하게 해라. ◇ 한가지만 해라!! - 함수는 한 가지를 해야 하고, 그 한 가지를 잘 해야 하고, 그 한가지만 해야 한다. ◇ 위에서 아래로 코드 읽기 : 내려가기 규칙 - 책을 읽어 내려가는 것처럼 정렬한다. ◇ Switch 문은 Class 로 분기한다. ( 최대한 사용을 자제한다. ) ◇ 서술적인 이름을 사용하라. ◇ 함수 인수를 적게 하라. - 가장 이상적인 인수 갯수는 0개 (무항) - 3개(삼항)은 가능한 피하는 것이 좋고, 4개 이상(다항)은 사용해선 안된다. ◇ 플래그 인수는 함수를 2개로 쪼개서 처리한다. ◇ 인수가 많을 경우에는 class 로 묶어서 전달하거나, member 변수를 사용한다. ◇ 부수.. 2012. 2. 28.
[Clean Code] 의미 있는 이름. □ 의도를 분명히 밝혀라. □ 그릇된 정보를 피하라. - 약어는 피하는 편이 좋다, - List 가 아니면 list 라는 변수명을 쓰지 않는다. ( 예를 들자면.. ) □ 일관성 있는 이름을 써라. - 한쪽에서 write 로 썼으면 계속 write 를 써라, state 등으로 일관성을 깨지 마라. □ 의미 있게 구분하라. - a1, a2, data, info 이런 의미가 불분명한 녀석은 의미있는 언어로 치환하라. - account, accounts, accountInfo, accountData 처럼 비슷하면서 구분이 안 되는 녀석은 확연히 구분되게 하라. □ 발음하기 쉽고 이해하기 쉬운 이름을 사용하라. - 그래야 의사소통이 쉽다. □ 검색하기 쉬운 이름을 사용하라. - 매직 넘버는 전역상수로 치환하라... 2012. 2. 28.
[Clean Code] 클린 코드란 무엇인가? 클린코드란? The C++ Programming Language 저자 Bjane Stroustrup - '보기에 즐거운' 코드. ( 오류, 메모리 누수, Race Condition, 일관성 없는 명명법 등은 즐겁지 않6다. ) - '한가지를 잘 하는' 코드. ( 함수, 클래스, 모듈은 주변과 연관성이 없이 (혹은 적게) 한가지 일만 한다. ) 나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 클린 코드는 한 가지를 제대로 한다. Object Oriented Analysis and Design.. 2012. 2. 28.
[Design Pattern/Java] equals 메소드를 오버라이드 할 때는 hashCode 메소드도 항상 같이 오버라이드 하자. hashCode 를 왜 override 해줘야 하는데? hashCode 메소드를 제대로 오버라이드 하지 않아 코드 결함이 생기는 경우가 흔합니다. equals 메소드를 오버라이드 하는 모든 클래스에서는 반드시 hashCode 메소드도 오버라이드 해야 합니다. 그렇지 않으면, Object.hashCode 메소드의 보편적 계약을 위반하게 되므로, HashMap 과 HashSet 및 HashTable 을 포함하는 모든 해시( hash ) 기반의 컬렉션들과 우리 클래스를 같이 사용할 때 우리 클래스가 올바르게 동작하지 않을 가능성이 매우 높습니다. hashCode 의 보편적 계약사항이 뭐길래? 1. 애플리케이션 실행 중에 같은 객체에 대해 한 번 이상 호출되더라도 hashCode 메소드는 같은 정수를 일관성 있.. 2012. 2. 22.
반응형