Java 썸네일형 리스트형 [CleanCode] 6장 객체와 자료 구조 자료 추상화 구현을 감추려면 추상화가 필요하다. 그저 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. 자료 구조를 사용하는 절차적인 코드는 기본 자.. [CleanCode] 5장 형식 맞추기 형식을 맞추는 목적 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기위한 간단한 규칙을 정의하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 코드 형식은 중요하다! 그러나 융통성 없이 맹목적으로 따르면 안된다. 코드 형식은 의사소통의 일환이다. 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 굉장히 높다. 따라서 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 원래 코드는 사라지더라도 개발자의 스타일과 규율은 사라지지 않는다. 적절한 행 길이를.. [CleanCode] 4장 주석 브라이언 W. 커니헨, P.J. 플라우거 "나쁜 코드에 주석을 달지 마라. 새로 짜라." 잘 달린 주석은 그 어떤 정보보다 유용하다. 그러나 우리가 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면 주석은 필요하지 않다.그러므로 주석이 필요하면 상황을 역전해 코드로 의도를 표현할 방법은 없는지 생각하자! 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 부정확한 주석은 독자를 현혹하고 오도한다. 더 이상 지킬 필요가 없는 규칙이나 지켜서는 안 되는 규칙을 명시한다. 코드는 자신이 하는 일을 진실되게 말한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 그러므로 우리는 (간혹 필요할지라도) 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 .. [CleanCode] 3장 함수 작게 만들어라! HtmlUtil.java re-refactoring public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages(pageData, isSuite); return pageData.getHtml(); } ) HtmlUtils를 리팩토링한 코드도 위와 같이 더 간결하게 만들 수 있다. 함수의 길이와 가로 글자 수 요즘은 한 화면에 글꼴을 조절하면 가로 150자 세로 100줄도 들어간다. 따라서 가로 150자를 넘어서는 안된다. (반드시 한 화면에 들어가야 한다.).. [CleanCode] 2장 의미 있는 이름 들어가면서 소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 지으면 여러모로 편하다. 이 장에서는 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다. 의도를 분명히 밝혀라 의도가 분명한 이름은 정말로 중요하다. 변수나 함수 그리고 클래스 이름은 존재 이유와 수행 기능, 사용 방법을 답해야 한다. 1.1 변수 나쁜 예시 int p; // 사람 수 (단위: 명) 이름 d는 아무 의미도 드러나지 않는다. 경과 시간이나 날짜라는 느낌이 안든다. 측정하려는 값과 단위를 표현하는 이름이 필요하다. int patientsCount; int loginFailUserCount; 좋은예시 1.2 코드 나쁜 예시 public List getThem(){ List list1 = new ArrayList(); for (int[] .. [CleanCode] 1장 깨끗한 코드 코드가 존재하리라 앞으로 코드가 사라질 가망은 전혀 없다. 왜? 코드는 요구사항을 상세히 표현하는 수단이기 때문 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이 프로그래밍이다. 이렇게 명시한 결과가 바로 코드다. 궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 나쁜 코드 회사가 망한 원인은 바로 나쁜 코드 탓이었다. 80년대 후반 킬러 앱 하나를 구현한 회사는 나쁜 코드로 인한 버그로 인해 망했다. 버그는 다음 버전에도 그대로 남아있고, 프로그램 시동 시간이 길어지고 죽는 횟수도 늘었다. 원인은 출시에 바빠 코드를 마구 짜서, 기능을 추가할수록 코드가 엉망이 되었던 탓었다. 르블랑의 법칙 나중은 결코 오지 않는다. 나쁜 코드는 개발 속도를 크게 떨어뜨린다. 나쁜 코드가 쌓일수록 .. [EffectiveJava] 12장 직렬화 85. 자바 직렬화의 대안을 찾으라 // 85-1 역질렬화 폭탄 - 이 스트림의 역직렬화는 영원히 계속된다. static byte[] bomb() { Set root = new HashSetM(); Set s1 = root; Set s2 = new HashSet(); for (int i = 0; i < 100; i++) { Set t1 = new HashSet(); Set t2 = new HashSet(); t1.add("foo"); // t1을 t2와 다르게 만든다. s1.add(t1); s1.add(t2); s2.add(t1); s2.add(t2); s1 = t1; s2 = t2; } return serialize(root); // 간결하게 하기 위해 이 메서드의 코드는 생략함 } 86. Serial.. [EffectiveJava] 11장 동시성 78. 공유 중인 가변 데이터는 동기화해 사용하라 // 78-1 잘못된 코드 - 이 프로그램은 얼마나 오래 실행될까? private static boolean stopRequested; public static void main(String[] args) throws InterruptedException{ Thread backgroundThread = new Thread(() -> { int i = 0; while (!stopRequested) i++; }); backgroundThread.start(); TimeUnit.SECONDS.sleep(1); stopRequested = true; } // 78-2 적절히 동기화해 스레드가 정상 종료한다. public class StopTread{ privat.. 이전 1 2 3 4 5 6 다음