협력하는 객체들의 공동체 자바의 정석에서도 그렇고 객체지향이란 실제 세상에 있는 것들을 코드상으로 가져오는 즉 직접적이고 직관적으로 모델링 할 수 있는 패러다임이라고 하기도 한다. 다만 실제 세상은 그런 객체는 많이 없고 유사성 찾기 어려운 경우가 일반적이다 . 객체지향의 목표는 실세계를 모방하는 것이 아닌 새로운 세계를 창조하는 것! 그럼에도 불구하고 객체와 실세계를 비교하면서 개념을 동일시하게 되는 이유는 객체의 특징인 캡슐화와 자율성을 설명하기에 실세계의 생명체와 비유하는것이 이해하기 쉽기 때문이다. 연결 완전성 정의 : 시스템의 구성 요소들이 서로 잘 연결되고 상호작용할 수 있도록 설계하는 것을 의미합니다. 이는 객체 간의 관계와 상호작용을 명확하게 정의하여 시스템의 유연성과 확장성을 높이는..
점진적인 개선 어떻게 짰느냐고?- 프로그래밍은 과학보다 공예 - 깨끗한 코드는 바로 나오지 않는다. 초안부터 작성후 점진적으로 고쳐야 한다 점진적으로 개선하다- 점진적인 개선을 위해 필요한 것은 TDD- 점진적으로 수정해도 해당 코드가 유효한지 빠르게 파악 가능 결론- 그저 돌아가는 코드로 만족하지 마라- 서두르지 말고 시간을 들여 설계 그리고 개선해 코드를 작성하자 코드 해당 장에서는 대부분 코드의 수정 사항을 보여주면서 어떻게 개선했는지 보여준다. 처음에는 boolean 변수만 수정해서 진행했으나 그 외 String, Integer등 인수의 숫자를 늘리면 늘릴수록 코드는 길어지고 복잡해지며 답도 없어진다. 그래서 인수 유형을 HashMap으로 선언한 다음 스키마 요소를 분석해서 진짜 유형으로 ..
시스템 도시를 세운다면- 도시는 큰 그림을 그리는 사람과 작은 사항에 집중하는 사람들이 모여서 제대로 된 기능을 한다- 추상화와 모듈화로 시스템을 깨끗하게 유지가능 시스템 제작과 시스템 사용을 분리하라 - 시스템웨어 시스템은 준비과정과 런타임 로직으로 분리를 해야한다 - 관심사 분리를 하자 의존성 주입- 사용과 제작을 분리하는 메커니즘 중 하나 - 제어 역전 : 한 객체가 맡은 보조 책임을 새로운 객체에게 넘기는 것 , 새로운 객체는 넘겨받은 책임으로 단일 책임 우너칙을 지킨다- 보통 필요한 객체는 실행시점에서 이미 만들어져있고 생성자 인수나 설정자 메서드를 사용해서 의존성을 설정한다 확장- 처음부터 어떻게 규모를 다 알고 설계하냐? 처음엔 작게 그리고 점차 키우는게 정석이다- 오늘 주어진 사용자 스토..
오류 처리 오류 코드보다 예외를 사용하라 - 예외를 사용하는 것이 오히려 더 깔끔할 수 있다. Try-Catch-Finally문부터 작성하라 - 예외 발생할 코드를 작성할 때는 try-catch-finally 서식을 쓰자 미확인 예외를 사용하라미확인 예외(Unchecked Exception)란?미확인 예외는 프로그램 실행 중 발생할 수 있는 예외 상황을 나타냅니다.이러한 예외는 반드시 처리하지 않아도 되며, 프로그램이 계속 실행될 수 있습니다.대표적인 미확인 예외로는 NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 등이 있습니다. 예외에 의미를 제공하라 - 오류 메세지에 정보를 담아 예외와 함께 던져라 - 예외 던질 ..
객체와 자료구조 자료 추상화- 자료를 세세하게 공개하기보단 추상적인 개념으로 표현하는 것이좋음 자료/객체 비대칭- 객체는 추상화를 사용하여 자료를 다루는 함수만 공개한다 (자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다. 디미터 법칙- 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다.- 객체는 자료를 숨기고 함수를 공개한다- 객체는 조회 함수로 내부 구조를 공개하면 안 됨 기차 충돌- 메서드..
형식 맞추기 형식을 맞추는 목적- 가독성을 위해서 적절한 행 길이를 유지하라 신문기사처럼 작성하라- 이름은 간단하고 알기 쉽게 - 아래로 내려갈수록 세세하게 개념은 빈 행으로 분리하라- 메서드 간 행 띄우기 세로 밀집도- 서로 밀접한 코드 행은 세로로 가까이 놓여야한다 // 의미 없는 주석을 제거함으로써 코드가 한눈에 들어온다.// 변수 2개에 메소드가 1개인 클래스라는 사실이 드러난다.public class ReporterConfig { private String m_className; private List m_properties = new ArrayList(); public void addProperty(Property property) { m_properties.add(property);..
주석 부정확한 주석은 아예 없는 주석보다 훨씬 나쁘다 주석은 나쁜 코드를 보완하지 못한다 - 일반적으로 주석을 사용한다는 것은 코드 품질이 나빠서 별도의 설명이 필요하다는 뜻이다 - 주석을 달 시간에 코드를 정리해라 - 그러고보니 js는 주석 없이 작성하던데 이걸 의도한 건가? 코드로 의도를 표현하라 - 그냥 주석 달 생각하지 말고 영단어로 메서드 만들어서 보기 좋게 하자 if (employee.isEligibleForFullBenefits()) 좋은 주석- 법적인 주석 // Copyright (C) 2003, 2004, 2005 by Object Montor, Inc. All right reserved.// GNU General Public License- 정보 제공하는 주석- 의도를 설명하는 주석..
함수 작게 만들어라 - 함수를 작게 만들자 - 모든 함수를 정말 작게 못해도 4-6줄 정도로 줄여야 하나본데? 이러면 로직 넣을 구멍이 있나...? 한 가지만 해라! - 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야한다. 그 한가지만을 해야 한다 추상화 수준 참고 https://onestone-dev.tistory.com/3 [CleanCode] 함수의 추상화 수준이란?오랜만에 CleanCode를 다시 읽어보고 있는데 함수의 추상화 수준에서 책 읽기를 멈추고 3번 다시 읽었다. 아무래도 책의 추상화 수준이 높은 단계 였던 것 같다. "메서드는 한 가지만 해라!"라는 말onestone-dev.tistory.com Switch 문 - 일반적을 잘 안 쓰는 것이 좋다고 함 - 다형적 객체를 생성하는..
의미 있는 이름 의도를 분명히 밝혀라 - 존재 이유, 수행 기능 , 사용 방법 등 따로 주석을 달려고 하지말고 이름에 의도를 명확하게 표현할 수 있도록하자 // Badpublic List getThem() { List list1 = new ArrayList(); for (int[] x : theList) { if (x[0] == 4) { list1.add(x); } } return list1;} - 해당 코드는 지뢰찾기 게임 코드였다. 다만 이렇게 있어선 알기가 쉽지 않다 // Goodpublic List getFlaggedCells() { List flaggedCells = new ArrayList(); for (int[..
부제 : 코드를 주의깁게 짜는 방법 1장 깨끗한 코드 코드가 존재하리라 - 코드는 없어지지 않는다. 코드란 요구사항을 상세히 표현하는 수단이다 - 요구사항을 모호하게 줘도 우리의 의도를 정확하게 꿰뚫는 프로그램은 없다. - chat gpt? 나쁜코드- 시간에 쫗겨 아무렇게나 코드를 작성하다보면, 쓰레기 코드를 나중에 손보겠다고 넘기면, 일단 프로그램이 돌아가니까 방치하면 어떻게 될까?? = 망한다 싹. 나중은 결코 오지 않는다 - 르블랑의 법칙 나쁜 코드로 치르는 대가 - 나쁜 코드 즉 쓰레기처럼 코드를 짜두면 나중에 코드 수정시 매번 얽힌 코드를 해독해야하고 생산성은 갈수록 떨어진다 원대한 재설계의 꿈 - 자. 재설계를 웬만하면 회사에서 안 시키지만 시키면 누가하냐? 잘 하는 애들이 한다. 그럼 나..