본문 바로가기

better code9

헤드퍼스트 디자인패턴 디자인 패턴 패턴은 특정 컨텍스트 내에서 주어진 문제의 해결책이다. 패턴은 반복적으로 등장하는 문제에 적용할 수 있어야 한다. 디자인 패턴은 개발자 사이에서 서로 모두 이해할 수 있는 용어를 제공한다. 간단한 단어로 많은 얘기를 할 수 있게 된다. 꼭 필요하지 않은 패턴은 빼버린다. 객체지향 원칙 바뀌는 부분은 캡슐화하자. 상속보다는 구성(composition)을 활용하자. 인터페이스에 집중하자. 클래스는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다. (OCP) 의존성 뒤집기 원칙: 구체적인 클래스에 의존하지 않고 추상적인 것에 의존하자. 변수에 구상 클래스의 레퍼런스를 저장하지 않아야 한다. 구상 클래스에서 유도하지 않고, 인터페이스나 추상 클래스에서 유도하자. 베이스 클래스에 구현되어 있는.. 2023. 7. 19.
리팩터링 - 마틴 파울러 인상깊게 보았던 부분은 볼드 + 색깔을 변경해 두었다. Chapter 2: 리팩터링 원칙 리팩터링 하기 전과 후의 코드가 동일하게 동작해야 한다. 소프트웨어를 개발할 때 목적을 분명히 하자. ‘기능 추가’인지, ‘리팩터링’인지. 리팩터링의 궁극적인 목적은 개발 속도를 높임에 있다. Chapter 3: 코드에서 나는 악취 주석을 달아야 할 부분은 무조건 함수로 만들자. 함수를 짧게 만들어 보자. 매개변수 목록을 줄이자. 매개변수 목록이 길어지면 그 자체로 이해하기 어려울 때가 많다. 전역 데이터를 주의하자. 전역 데이터는 코드베이스 어디서든 건드릴 수 있고, 값을 누가 바꿨는지 찾아내기 어렵다. 프로그램을 모듈화할 때에는 코드를 여러 영역으로 나눈 후 영역 안의 상호작용은 늘리고 영역 사이 상호작용은 줄이.. 2023. 7. 5.
객체지향의 사실과 오해 유일하게 변하지 않는 것은 모든 것이 변하지 않는다는 사실뿐이다. - 헤라클레이토스 처음에 객체지향을 배웠을 때에는 Java를 배우면서 같이 배웠던 개념인지라, 클래스, 상속, 다형성 등을 Java 문법에 빗대어 배웠다. 그래서 객체지향의 본질적인 의미보다는 Java에 적용된 개념과 어떻게 구현하는지를 중심으로 배웠던 것 같다. 하지만 이 책에서는 우리가 널리 알고 있는 앨리스의 예제를 들어서 객체지향에 대해 잘못 알고 있던 개념들을 바로잡아준다. 우리가 중요하게 생각해야 했던 것이 상속같은 지엽적인 내용이 아니라, 객체 사이의 상호작용을 통해 이루어지는 시스템이었던 것임을 깨달을 수 있었다. 시스템 내에서 객체는 책임을 가지고 다른 객체와 소통(협력)을 한다. 같은 책임을 가진다면 다른 객체로 대체할 .. 2023. 7. 2.
[TIL] copy-on-write 방법론 - js에서 퍼포먼스 테스트 함수형 프로그래밍 책을 읽다가 좋은 패턴 중 하나로 copy-on-write 원칙을 설명하는 것을 보았다. js에서는 파라미터를 함수로 넘길 때 객체의 경우 레퍼런스를 넘기게 된다. 따라서 레퍼런스 값에 직접 access하다 보면 우리가 인지하지 못하는 변화가 있을 수 있다는 것이 논조이다. 예를 들어, 전역 변수를 parameter로 넘겨주고, 함수에서는 전역변수를 변경한다면, 해당 변수를 참조하는 또 다른 함수의 경우 예기치 못한 변화로 인한 버그가 발생할 수 있다는 것이다. 책에서 추천하고 있는 방향은 다음과 같다. function f(arr) { const newArr = arr.slice(); newArr[3] = "new"; return newArr; } const arr = ["hello",.. 2023. 4. 22.