2장 추상화 계층널값 및 의사코드 규약널값에 대한 규약을 지정하지 않으면, NullPointerException, NullRefrenceException, Cannot read property of null과 같은 에러를 발생할 수 있다.이를 위해 널 안전성과 보이드 안전성에 대한 개념이 생겼다.자바나 c++에서는 옵셔널 타입을 통해서 널 안전성을 보장한다.추상화 계층 및 코드 품질의 핵심 요소가독성모든 세부 사항을 이해하는 것은 불가능하지만, 높은 계층의 추상화를 이해하고 사용하기 쉽게 해야한다.모듈화구현 세부 사항이 외부로 노출되지 않도록 보장할 때, 다른 계층이나 코드의 일부에 영향을 미치지 않고 계층 내에서만 구현을 변경하기가 매우 쉬워진다.재사용성 및 일반화성테스트 용이성코드의 계층추상화 계층을..
좋은 코드, 나쁜 코드 [1장] 코드 품질고품질 코드신뢰할 수 있는 코드유지보스가 용이버그가 적은 소프트웨어를 생산요구사항에 유연하게 대처**저품질 코드**요구사항 에 대규모의 코드 변경 및 리팩터링이 필요시스템이 미리 정의되지 않은 상태에 놓이고 손상될 가능성이 있음코드는 어떻게 소프트웨어가 되는가코드는 일반적으로 엔지니어가 작성하자마자 실제로 실행되는 소프트웨어가 되지 않는다.코드가 의도한 대로 작동하고 기존의 기능이 여전히 잘 동작하기 위해서 다양한 과정과 점검이 이루어진다.이러한 과정을 소프트웨어 개발 및 배포 프로세스라고 한다.코드베이스 : 소프트웨어를 빌드할 수 있는 코드가 저장된 저장소git, subversion, perfore와 같은 형상 관리 시스템으로 관리됨코드 제출 : 코드 커밋, 풀..
6장 스터디 기능 설계 대 구조 설계 기능 측면 설계 : 제품이 사용자를 위해 무엇을 할 수 있는지에 초점 구조 측면 설계 : 제품의 형태가 어떠해야 하는지에 초점 훌륭한 기능이 훌륭한 소프트웨어를 만드는 충분조건이라면, 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건이다. 미래를 예측할 수없지만, 변경을 수용할 수 있도록 설계에 마련해야 한다 객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다. 시스템 기능을 더 작은 책임으로 분할되고 적절한 객체에게 분배되기 때문에 기능이 변경되더라도 객체 구조는 그대로 유지된다. 이것이 객체를 기반으로 책임과 역할을 식별하고 메시지를 기반으로 객체들의 협력 관계를 구축하는 이유다. 안정적인 객체 구..
4장 스터디 역할, 책임, 협력 인간이 어떤 본질적인 특성을 가지고 있느냐가 아닌 어떤 상황에 처해 있느냐가 인간의 행동을 결정한다. 개인이 처해 있는 정황 또는 문맥이 인간의 행동 방식을 결정한다. 객체지향 프로그램이에서 협력이라는 문맥이 객체의 행동 방식을 결정한다. 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야할 상태와 행동부터 고민하는 것이다. 요약> 객체지향 프로그래밍에서 가장 중요한 것은 객체들 간의 요청과 응답 속의 협력이다. 객체지향적인 협력 일반적으로 해결 과정에서 여러 사람이 참여하게 된다. 이 과정에서 요청과 응답의 연쇄적인 흐름이 발생한다. 협력 은 한 사람이 다른 사람에게 도움을 요청 할 때 발생한다. 요약1> 협력은 다수의 요청과 응답으로 이루어지며, 연쇄적..
2장 스터디 프로퍼티와 프로퍼티 값의 차이 정적 & 동적 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현 단순한 값과 다른 객체를 참조하는 링크로 구분 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수 효과를 초래한다는 것을 의미 → Side effect 객체의 행동은 상태에 영향을 받는다 객체의 행동은 상태를 변경시킨다 두 인스턴스의 상태가 같다면 값이 같다고 판단한다. 값이 같은지 여부는 상태가 같은지로 판단한다. 식별자 객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미하며, 이를 식별자라고 한다. 즉 객체가 아닌 단순한 값은 식별자를 가지지 않는..
명령형 프로그래밍 대표적으로 절차지향, 객체지향 프로그래밍이 있으며, 프로그램에서 값이나 상태의 변화를 중요하게 생각합니다. 컴퓨터가 수행할 명령들을 순서대로 작성한 것이며, 어떻게 그것을 해결할 것인가에 관심을 둔 프로그래밍 기법입니다. 시간 순서대로 문제를 해결하며 알고리즘을 명시하지만, 목표를 명시하지 않는다는 특징이 있습니다. 절차지향 프로그래밍 (명령형) 객체 지향 프로그래밍과 비교되며, 무엇을 어떤 절차로 할 것인가에 중점을 두고 있습니다. 순차적인 처리가 중요하며 프로그램 전체가 유기적으로 연결되도록하는 프로그래밍 패러다임 입니다. 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시하는 프로그래밍 기법으로 C언어가 대표적입니다. 실행속도가 빠르지만, 코드의 순서가 바뀌면 동일한 결과를 ..