외부코드와 우리 코드가 융합되는 부분을 깔끔하게 처리하는 법 외부코드 사용하기 외부 코드를 활용하는 경우, 이를 이용하는 클래스나 클래스 계열 밖으로 노출시키지 않고 내부에서 처리 --> 외부 코드를 사용할 수 있도록 내부 코드에서 클래스 같은걸로 묶어서 인터페이스만 열어주면 나중에 외부 코드가 바뀔 때도 여유있게 대응 가능 경계 살피고 익히기 학습테스트: 외부 코드를 사용하기 전에 간단한 TC를 작성해보면서 외부 코드를 익힘 --> 프로그램에서 사용하는 방식으로 외부 API를 호출해보면서 내가 예상한대로 동작하는지를 체크하는 과정 학습테스트는 공짜 이상이다 외부 API에 대해 필요한 지식만 확보하는 손쉬운 방법 --> 새로운 패키지 버전이 나오는 경우, 미리 짜둔 학습테스트를 돌려서 변경사항을 체크할 ..
뭔가 잘못될 가능성은 늘 존재한다. ---> 오류 처리의 중요성이 높아짐 오류보다 예외 사용하기 - 비즈니스 로직과 오류 알고리즘을 분류 - Try - Catch - Finally 문부터 작성하라 - 예외가 발생할 코드를 짜는 경우에 추천. - try 블록에서 무슨 일이 생기든 호출자가 기대하는 상태 정의가 쉬워진다 - TDD 할 때 강제로 예외를 일으키는 테스트 케이스 작성 후 테스트를 통과하게 코드를 작성하는 방향 권장 - try 블록의 트랜잭션 범위부터 구현 ---> 트랜잭션의 본질을 이해하기 쉬워진다. 미확인(unchecked) 예외 사용 예외에 의미를 제공 - 오류가 난 원인을 찾기 쉽도록 정보를 담아 던질 것 호출자를 고려해 예외 클래스를 정의 정상 흐름을 정의하라 null을 반환하지 마라 -..
자료 추상화 - 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스 - 객체에서 자료는 숨기고 자료를 다루는 함수만 제공 - 아무 생각 없이 get, set 함수를 추가하는 것이 가장 나쁘다 (선생님 swift의 private(set)은요...?) 자료/객체 비대칭(이해 못함) - (자료구조를 사용하는) 절차적인 코드는 기존 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. - 절차적인 구조는 새로운 자료구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다. (--> 새로운 함..
목적: 원활한 의사소통 적절한 행 길이 유지 - 파일의 길이가 짧게 유지되도록 - 첫부분: 고차원 개념과 알고리즘 설명 - 마지막: 저차원 함수와 세부 내역 (아래로 내려갈수록 세세하게 묘사) - 개념 사이는 빈 행으로 구분 (새로운 개념을 시작한다는 시각적 개념) - 밀접한 코드들끼리는 가까이 둔다 (주석이 끼면 멀어지므로 주의) - 수직거리 - 변수 선언: 사용하는 위치에 최대한 가깝게 - 인스턴스 변수: 클래스 맨 처음에 선언 - 종속함수: 한 함수가 다른 함수를 호출하면 세로 가까이 (호출하는 함수 - 호출되는 함수 순서로) - 개념적 유사성: 유사한 메서드끼리 가까이 둔다 가로 형식 맞추기 - 행 길이가 짧은 걸 대체로 선호 - 가로 공백과 밀집도 - 밀접한 개념은 붙여서, 요소가 나뉘는 지점은..