본문 바로가기

리팩토링17

리팩토링 스터디 #10 - 마무리 리팩토링 스터디의 마지막 시간입니다. 마지막인만큼 내용이 많지 않아 아주 짧게만 정리하고, 후기로 이어집니다. 타입과 인스턴스를 구분 "타입과 인스턴스를 구분" 하라는 것은 이전에 진행된 북스터디 중 이펙티브 자바 에서 나왔던 말이라고 합니다. 리팩토링 책에서도 유명한 말이라며 인용하였는데, 어떤 대상을 보고 단순히 타입인지 아니면 그 타입을 지닌 인스턴스인지 구분하는 것은 중요합니다. 서로 혼동하기도, 자신도 모르게 혼용하기도 쉬운 편이라 간간히 문제가 되기도 하는 부분입니다. 이러한 효과 덕분인지, 스터디에 참여했던 인원들도 정확히 필요한 경우가 아니라면 상속은 지양하는 편이라는 의견이 있었습니다. 다른 영향을 미처 고려하지 못하고 잘못 사용해서 보는 경우가 있기에 책에서도 이럴 땐 위임을 이용한 방.. 2021. 3. 13.
리팩토링 스터디 #9.5 - 내용 미리보기 세 달간 진행되었던 리팩토링 스터디도 어느덧 마지막 시간이 되었습니다. 스터디를 진행하며 정리했던 내용들을 다시 보니 감회가 새롭네요. 마지막까지 알차게 마무리 해야겠습니다. 타입 코드를 서브클래스로 바꾸기 특정한 특성에 따라 대상을 구분해야하는 경우 타입 코드 필드를 사용합니다. 여기에 한 발 더 나아가 다양한 기능을 구현하기 위해 서브클래스를 적용할 수 있습니다. 서브클래스를 사용할 경우 두 가지 이점이 있습니다. 첫 번째는 조건에 따라 다르게 동작하는 다형성을 제공할 수 있고, 두 번째는 슈퍼클래스와 서브클래스 사이의 관계를 명확히 파악할 수 있게 만들어줍니다. 일단 서브클래스를 이용하기로 마음먹었다면, 서브클래스를 원본 클래스 자체에 적용할지, 타입 코드 필드에 적용할지를 선택합니다. 전자의 경우.. 2021. 2. 27.
리팩토링 스터디 #9 - API 구조 개선 & 상속 다루기 리팩토링 스터디 아홉번째 시간입니다. 이번 시간에는 API 구조 개선의 후반부 내용과 상속에 관한 내용을 다루었는데요, 챕터는 많았지만 각각의 분량이 적어 짧게 끝났습니다. 슬슬 다음 북스터디의 주제를 생각해볼때가 다가오고 있네요. 일단 이야기가 나온 후보군으로는 클린아키텍처와 TDD, 코드 컴플리트, 클린 소프트웨어 등이 있었는데 아직 확정된건 없네요. 다음 계획은 천천히 정하도록 하고, 우선 리팩토링 스터디부터 시작하겠습니다. 이미 유명한, 알고있던 기법들 생성자를 팩토리 함수로 바꾸기 기법은 리팩토링 스터디 뿐 아니라 다양한 곳에서 이미 널리 통용되던 기법이었다고 합니다. 전 개인 사정으로 참여하지 못해서 몰랐던 내용이었지만, 동아리원분들이 이전에 진행했던 이펙티브 자바나, 디자인 패턴 등의 책에서.. 2021. 2. 9.
리팩토링 스터디 #8.5 - 내용 미리보기 계절학기 일정 때문에 포스팅이 많이 미뤄졌습니다. 이것저것 하기만 하고 정작 포스팅은 안 한 덕분에 글 쓸 거리들이 가득 쌓여있으니 당분간은 신나게 타이핑 해야겠네요. 이번 스터디는 지난 시간에 진행했던 API 리팩토링의 후반부와 상속 다루기에 관한 내용입니다. 바로 시작해보겠습니다. 세터 제거하기 우리가 setter 메서드를 선언하는 목적은 특정 필드의 값을 변경하기 위해서입니다. 따라서 setter를 선언하는 행위는 곧 이 필드는 변경될 수 있는 값임을 나타내는 것과 같습니다. 그러나 코드들을 보면 우리는 어떤 필드를 새로 만들때 습관적으로 Getter와 Setter를 선언해주는 경우가 꽤 많습니다. 실제로는 한 번 선언된 필드의 값을 후에 변경해 줄 일이 없을때 조차도요. 이런 경우 세터 제거하기를.. 2021. 2. 8.
리팩토링 스터디 #8 - API 구조 개선하기 8주차 리팩토링에서는 방법과 API의 구조를 개선하는 방법에 대한 내용을 진행했습니다. 책에 실려있던 내용은 리팩토링 스터디 #7.5 - 내용 미리보기를 참고해주세요. 실제로도 자주 쓰이는 기법? 10.5절의 특이 케이스 진행하기의 경우엔 이전에 진행된 객체지향 스터디에서 널 객체 패턴(null object pattern)이라는 이름으로 언급된 적이 있었다고 합니다. 현재 스터디를 리팩토링 2판으로 진행중인데, 1판의 본문에서는 실제로 이런 이름으로 쓰여져 있었다고 하네요. 사례를 기반으로 지어진 기존의 이름과 달리 지금은 특징을 기반으로 한 직관적인 이름으로 바뀐 모습입니다. 이 기법이 잘 이해되지 않으면 객체지향의 개념 쪽을 다시 한 번 살펴보는게 좋을 것 같습니다. 마침 스터디를 함께 진행하시던 분.. 2021. 1. 23.
리팩토링 스터디 #7.5 - 내용 미리보기 한 주를 마무리하는 리팩토링 스터디의 여덟번째 시간입니다. 이번 시간에는 API 리팩토링에 관한 내용을 다룹니다. 사용하기 쉽고, 이해하기도 쉬운 API를 만들고 개선할 수 있는 방법이 담겨있습니다. 그럼 시작하겠습니다. 특이 케이스 추가하기 Introduce Special Case 특정한 데이터의 값을 확인하고 같은 동작을 수행해주는 코드들은 여기저기서 흔히 등장합니다. 이는 중복 코드의 한 종류로, 공통적인 동작을 한 곳에 모아서 사용하는 리팩토링을 적용하기에 안성맞춤입니다. 이런 방법을 특이 케이스 패턴(Special Case Pattern)이라고 부릅니다. 이러한 패턴의 가장 큰 장점은 매번 등장하는 식을 대신하여 간단한 함수 호출을 통해 원하는 동작을 간결하게 표현할 수 있다는 점입니다. 특히 .. 2021. 1. 16.