마틴 파울러 - 리팩터링 (2판) 의 9장 내용 중 기억하고 싶은 것 기록 ✏️✏️ 9.4 참조를 값으로 바꾸기 (change Reference to Value) - 참조로 다루는 경우: 내부 객체는 그대로 둔 채 그 객체의 속성산 갱신함. - 값으로 다루는 경우: 새로운 속성을 담은 객체로 기존 내부 객체를 통째로 대체함 값 객체는 불변이기 때문에 자유롭게 활용하기 쉽다. 불변 데이터 값은 프로그램 외부로 건네줘도 나중에 그 값이 나 몰래 바뀌어서 내부에 영향을 줄까 염려하지 않아도 된다. 값을 복제해 이곳저곳에서 사용하더라도 서로간의 참조를 관리하지 않아도 된다. 그래서 값 객체는 분산 시스템, 동시성 시스템에서 특히 유용하다. 9.5에서 나오지만.. 이런 값 객체의 특성 때문에 이번 리팩터링을 적용..
마틴 파울러 - 리팩터링 (2판) 의 7장 내용 중 기억하고 싶은 것 기록 ✏️✏️ 6장에서는 기본적인 리팩터링 기법들을 설명해주십니다. (함수 추출하기 / 함수 인라인 하기 / 이름 바꾸기 / 매개변수 객체 만들기 등등) 7장에서는 캡슐화를 주제로한 리팩터링 기법들을 설명해주시는데 인상깊은 몇가지만 기록합니다. 7.1 레코드 캡슐화 하기 (Encapsulate Record) (위의 예제랑 다른 예제에 대한 설명입니다,,) .... 클라이언트가 데이터 구조를 요청할 때 실제 데이터를 제공해도 된다. 하지만 클라이언트가 데이터를 직접 수정하지 못하게 막을 방법이 없어서 '모든 쓰기를 함수 안에서 처리한다' 는 캡슐화의 핵심 원칙이 깨지는게 문제이다. 그래서 내부데이터를 복제해서 제공한다. get rawDa..
마틴 파울러 - 리팩터링 (2판) 의 4장 내용 중 기억하고 싶은 것 기록 ✏️✏️ [1] 테스트 코드의 가치 프로그래머들은 대부분의 시간을 디버깅에 쓴다. (실제 코드를 작성하는 시간의 비중은 그리 크지 않다) 컴파일할 때마다 테스트를 돌렸더니 생산성이 급상승했다. 디버깅 시간이 크게 줄어든 것이다. 직전까지 테스트가 성공했다면 마지막 테스트 이후에 작성한 코드에서 버그가 발생했음을 알 수 있다. 테스트를 자주 돌려봤기 때문에 버그가 발생한 지점은 조금 전에 작성한 코드에 있다는 것을 알 수 있고 그로인해 디버깅 시간이 크게 줄어든다. [2] 마틴파울러에게 배우는 좋은 테스트 습관 1. 자주 테스트하기 자주 테스트하라. 작성 중인 코드는 최소한 몇 분 간격으로 테스트하고, 적어도 하루에 한 번은 전체 ..
마틴 파울러 - 리팩터링 (2판) 의 1,2장 내용 중 기억하고 싶은 것 기록 ✏️✏️ [1] 리팩터링하는 이유 리팩터링의 궁극적인 목적인 개발 속도를 높여서 더 적은 노력으로 더 많은 가치를 창출하는 것이다. 아래 그래프처럼 내부 설계가 잘 된 소프트웨어는 새로운 기능을 추가할 지점과 어떻게 고칠지를 쉽게 찾을 수 있다. 사람들이 빠지기 쉬운 가장 위험한 오류는 리팩터링을 '클린코드'나 '바람직한 엔지니어링 습관' 처럼 도덕적인 이유로 정당화하는 것이다. 리팩터링은 오로지 경제적인 이유로 하는 것이다. (개발 기간 단축, 기능 추가 시간 단축, 버그 수정 시간 단축) 스스로 이렇게 인식하고 다른 사람과 대화할 때도 이 점을 명심하라. 리팩터링하도록 이끄는 동력은 어디까지나 경제적인 효과에 있다. 이를 ..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [ 요약 ] 상속 주의사항 1. 상속은 코드 재사용이 아니라 타입 계층을 구현하기 위해 쓴다. (서브클래싱이 아니라 서브타이핑을 한다.) 2. is-a 관계가 언어적으로 맞다고 상속관계를 막 쓰면 안된다. 행동호환성을 고려해야한다. [1] 상속의 목적 상속을 사용하는 일차적인 목표는 코드 재사용이 아니라 타입 계층을 구현하는 것이여야한다. 상속은 코드를 쉽게 재사용할 수 있는 방법을 제공하지만 부모 클래스와 자식 클래스를 강하게 결합시키기 때문에 설계의 변경과 진화를 방해한다. 반면 타입 계층을 목표로 상속을 사용하면 다형적으로 동작하는 객체들의 ..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [1] 캡슐화 [ 캡슐화에 대한 오해 ] 많은 사람들이 객체의 캡슐화에 관한 이야기를 들으면 데이터 은닉(data hiding)을 떠올린다. 데이터 은닉이란 클래스의 모든 인스턴스 변수는 private으로 선언해야하고 오직 해당 클래스의 메서드 만이 인스턴스 변수에 접근 할 수있어야하다는 것이다. 그러나 캡슐화는 데이터 은닉 이상이다. 캡슐화란 단순히 데이터를 감추는 것이 아니다. 소프트웨어에서 변할 수 있는 모든 개념을 감추는 것이다. 코드 수정으로 인한 파급효과를 제어할 수 있는 모든 기법이 캡슐화의 일종이다. [ 캡슐화의 여러 종류 ] - 데..
좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! 제가 조금 재구성한 부분이 있기때문에 꼭 책을 읽어보시는 것을 추천드립니다. [1] 클래스의 응집도를 판단하는 세가지 방법 1. 변경의 이유 서로 연관성이 없는 기능이나 데이터가 하나의 클래스안에 뭉쳐 있으면 응집도가 낮은 것이다. 클래스가 하나 이상의 이유로 변경돼야한다면 응집도가 낮은 것이다. 변경의 이유에 따라 클래스를 분리하라 2. 인스턴스 변수가 초기화되는 시점 클래스의 속성이 서로 다른 시점에 초기화되거나 일부만 초기화된다는 것은 응집도가 낮다는 증거다. 응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화한다. 반면 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화되고 일부는 초기화되지 않은..
정말 정말 정말 좋은 책이다,, 좋은 예제와 쉽고 재밌는 글로 객체지향을 제대로 이해시켜주신다. (🥺💜) 저의 개발도서 TOP1 🏆🏅입니다. 기억하고 싶은 것을 기록합니다 ✏️ 좋은 부분이 너무 많아서 책을 많이 옮겨왔는데 혹시 문제가 된다면 말씀해주세요-! (예제도 함께 있는 책을 꼭 읽어보시는 것을 추천드립니다!) [1] 좋은 설계란? 좋은 설계란 오늘의 기능을 수행하면서 내일의 변경을 수용할 수 있는 설계다. 좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다. [2] 좋은 객체지향 설계란? 좋은 객체지향 설계는 협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것이다. 구체적으로 말하면.. 객체지향의 본질은 협력하는 객..
클린 애자일은 회사에서 스터디하면서 읽었고 카이젠 저니는 데뷰 세션 주먹구구 게 섯거라 K-Agile이 나가신다 (우리에게 딱 맞춘 애자일로 함께 팀을 개선한 이야기) 에서 발표자님이 추천해주셔서 읽게 되었습니다. (소설이라 엄청 재밌을 것이라고 기대를 많이 해서 그런지,,, 별로 재미 없어서 후루룩 읽었습니다,,) 두 책을 읽으면서 애자일에 대해서 배운 것들 중 기억하고 싶은 것을 기록합니다. ✏️ [1] 애자일 (Agile) 이란? Agile은 기민한, 민첩한 이라는 뜻을 가지고 있는 단어 입니다. '작게 시도하고, 실패하고, 학습하고, 개선함으로써' 기민함을 확보하는 것이 애자일의 지향점입니다. [2] 소프트웨어에서 애자일 과학적 관리법 - 철저하게 분석하고 그에 따라 상세한 계획을 만들기 전까지는..
이 책을 읽고 기억하고 싶은 부분을 기록했습니다. ✏️ 전부 책에서 가져온 내용이고 제가 아주 조금 재구성 했습니다. 책을 직접 읽어보시는 것을 추천드립니다. [1] 변수이름 잘 짓는 법 1.1 날짜를 표현할 때 일자 day를 뜻하는 변수를 설정하고 싶다면 그냥 day를 사용하면 된다. 그런데 그냥 day는 없다. 프로그램은 항상 어떤 의미와 의도를 가진 day만을 사용한다. [ 안좋은 예 ] int d int m int y [ 좋은 예 ] int someday int today int thismonth int finalYear int daysSinceCreated int monthSinceUpdated int yearsSinceRegistered 1.2 중요한 단어를 앞에 쓰기 변수 이름을 여러 단어로..
- Total
- Today
- Yesterday
- METAL
- cocoapod
- ribs
- Flutter Spacer
- Flutter 로딩
- ipad multitasking
- DRF APIException
- flutter 앱 출시
- 구글 Geocoding API
- 장고 Custom Management Command
- Flutter Text Gradient
- Python Type Hint
- Django Heroku Scheduler
- SerializerMethodField
- flutter build mode
- PencilKit
- flutter deep link
- Sketch 누끼
- github actions
- Flutter Clipboard
- Flutter getter setter
- 플러터 얼럿
- 플러터 싱글톤
- drf custom error
- Django Firebase Cloud Messaging
- 장고 URL querystring
- Dart Factory
- Django FCM
- Watch App for iOS App vs Watch App
- flutter dynamic link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |