개발자 99% 커뮤니티에서 수다 떨어요!
5장 형식 맞추기
TIL (Today I Learned)
2022-02-28
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다.
책에서 기억하고 싶은 내용을 써보세요
형식을 맞추는 목적
-코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다.
적절한 행 길이를 유지하라
-500줄을 넘기지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. 반드시 지킬 엄격한 규칙은 아니지만 바람직한 규칙으로 삼으면 좋겠다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.
신문 기사처럼 작성하라.
-독자는 위에서 아래로 기사를 읽는다. 최상단에 기사를 멏 마디로 요약하는 표제가 나온다. 독자는 표제를 보고서 기사를 읽을지 말지 결정한다.
-소스 파일도 신문 기사와 비슷하게 작성한다. 이름은 간단하면서도 설면이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경 써서 짓는다.
-소스파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈 수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
개념은 빈 행으로 분리하라.
-패키지 선언부, import 문, 각 함수 사이에 빈 행이 들어간다. 너무도 간단한 규칙이지만 코드의 세로 레이아웃에 심오한 영향을 미친다. 빈 행은 새로운 개념을 시작한다는 시각적 단서다.
수직 거리
-서로 밀집한 개념은 세로로 가까이 둬야 한다. 물론 두 개념이 서로 다른 파일에 속한다면 규칙이 통하지 않는다. 하지만 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 마땅하다.
변수선언.
-변수는 사용하는 위치에 최대한 가까이 선언한다. 우리가 만든 함수는 매우 짧으므로 지역 변수는 각 함수 맨 처음에 선언한다.
종속함수
-한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치함다.
-가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다. 그러면 프로그램이 자연스럽게 읽힌다. 규칙을 일관적으로 적용한다면 독자는 방금 호출한 함수가 잠시 후에 정의되리라는 사실을 예측한다.
개념적 유사성
-어떤 코드는 서로 끌어당긴다. 개념적인 친화도가 높기 때문이다. 친화도가 높을 수록 코드를 가까이 패치한다.
-친화도가 놓은 요인은 여러가지다.
한 함수가 다른 함수를 호출해 생기는 직접적인 종속성.
변수와 그 변수를 사용하는 함수
비슷한 동작을 수행하는 일군의 함수,
-명명법이 똑같고 기본 기능이 유사하고 간단하다. 서로가 서로를 호출하는 관계는 부차적인 요인이다. 종속적인 관계가 없더라도 가까이 배치할 함수들이다.
세로 순서
-일반적으로 함수 호출 종속성은 아래 방향으로 유지한다. 다시말해 호출되는 함수를 호출하는 함수보다 나중에 배치한다. 그러면 소스 코드 모듈이 고차원에서 저차원으로 자연스럽게 내려간다.
-신문기사와 마찬가지로 가장 중요한 개념을 가장 먼저 표현한다.
팀 규칙
-팀은 한 가지 규칙에 합의해야 한다. 그리고 모든 팀원은 그 규칙을 따라야 한다. 그래야 소프트웨어가 일관적인 스타일을 보인다.
-어디에 괄호를 넣을지, 들여쓰기는 몇 자로 할지, 클래스와 변수와 메서드 이름은 어떻게 지을지 등등.. 그리고 우리가 정한 규칙으로 IDE코드 형식기를 설정한 후 지금까지 사용했다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
코드를 잘!! 짠다는게 쉬운게 아니라는 것을 느꼈다.
이 책을 읽고 이렇게 적는다고 끝이 아니라 수없이 연습을 해야겠다는걸 느꼈다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
자바를 아직 공부하지 않아 인스턴스 변수가 뭔지 모르겠다.
-클래스가 있는 객체 지향 프로그래밍에서 인스턴스 변수는 클래스에 정의된 변수로, 이를 위해 각각의 인스턴스화된 클래스의 객체가 별도의 사본이나 인스턴스를 가지고 있다. 인스턴스 변수는 클래스 변수와 비슷하다. https://itmining.tistory.com/20