1월 10일 (금)

객체지향 프로그래밍

뉴턴의 만유인력 발견 : 관측으로만 가능했던 걸 계산해서 예측할 수 있구나 깨닫게 됨.

나를 제외한 모든 것은 다 객체(Object)

서양 사람들은 물체를 바라볼 때 부분부분 나누어서 바라본다. 하나라도 정확히 맞아야 같은 종류로 판단한다. 동양 사람들은 물체와 자신을 동일시하고, 정확하게 같지 않아도 감으로 같은 종류로 판단하는 성향이 있다.

객체 지향은 서양 사람들의 생각에 가깝다.

클래스와 인스턴스

클래스에는 분류되어 있는 추상화된 코드만 있고, 인스턴스를 만들면 실제로 클래스가 가지고 있는 값들을 가지고 있는 실체가 만들어진다.

추상화

우리가 기억할 때 디테일한 부분은 감춰진다. 절차를 추상화하는게 어려우면 다 펼쳐놓은 다음 추상화하는 연습을 해도 좋다.

객체지향으로 만들면 if문이 사라진다. 상위레벨의 어떤가를 상속받으며 만들어 나간다.

  • 구조적 프로그래밍 : 제어 흐름의 직접적인 전환에 부과하는 규칙 goto 구문 없이 반복문으로 제어 흐름에 대한 직접적인 전환

  • 객체지향 프로그래밍 : 제어 흐름의 간적접인 전환에 부과하는 규칙

  • 다형성 +의존성 역전으로 제어 흐름에 대한 간접적인 전환 (모듈의 독립성)

  • 함수형 프로그래밍 : 변수 할당에 부과되는 규칙 불변성 / 가변성의 분리하는 변수의 독립성 고차 함수로 동작에 대한 추상화

객체를 만드는 원칙

다른 사람도 동의할 수 있게 만들어야 한다. 하나의 객체는 군대 보직처럼 하나의 책임만 가지고 있어야 한다. 단일책임원칙

기능 요구 사항이 바뀌었을 때, 하나의 요구사항에 하나만 바뀌면 잘 만들어진 객체(높은 응집도와 낮은 결합도).

소프트웨어는 계속해서 다시 만들어야 하기 때문에, 유지보수가 쉽게 설계해야 한다.

Class Diagram

순서도를 그려보고, 머리 속에 생각들을 시각화하고 설계하는게 도움이 된다.

입력 -> 처리 -> 출력

입력 -> 분리/검증 -> 저장/생성 -> 형식/변환 -> 출력

오늘 배운 것

  • 함수형 프로그래밍 개념 공부. 러닝 자바스크립트 책에서 해당 부분 찾아보며 공부했다. 완벽하게 이해는 못하겠지만 그 개념 자체는 대충 알 것도 같다.

  • 클로저가 처음에는 많이 헷갈렸는데 계속 보다보니 추상적인 생각이 좀 정리되는 것 같다. 실질적인 사용도를 모르는 게 문제다.

  • 너무 빠르게 지쳐버리는 기분이 든다. 길게 보자고 생각하면서... 느려도 조바심 내지 말자 생각하고 있기는 하다. 배우는 내용이 버거운건지 내가 더 열심히(?) 집중하고 있지 않은건지 구별하기 힘들다.

Last updated