본문 바로가기

Refactoring

L.I.N.E ! (줄맞추기) 여러 사람들이 개발한 소스를 보면서 한가지 특징을 몸에 채득하고 지내고 있다. 주위 개발자들에게도 자주 이야기를 했던 내용이다. 내가 여태까지 본 개발 소스중에서 줄이 잘 맞춰져 있는 소스일 수록 코드의 퀄리티가 좋았다. 소스코드의 줄 맞추기를 하지 않고 어떤 부분은 두칸 띄우기 어떤 부분은 세칸 띄우기 어떤 부분은 1줄 비우기 어떤 부붑은 2줄 비우기 등 규칙성이 없이 짜여진 소스의 퀄리티는 대다수가 좋지 않았다. 보통 줄맞추기가 형편 없을 수록 변수명이나 로직자체도 형편 없이 진행되는 경우가 많았다. 왜일까? 소스코드를 잘 짠다는 것은 읽기 좋게 짠다는 것이다. 읽기가 좋으려면 일단 기본적으로 들여쓰기 내쓰기 줄 바꿈이 규칙적이고 일목요연하게 되어있어야 한다. 그렇지 않으면 뇌는 혼선을 가지게 된다... 더보기
주석?! 본 코드는 아쉽게도 정말 실전에서 사용되는 코드이다. 오늘 발견된 웃픔 코드이다. 위에 코드에는 여러가지 문제가 많지만 그중에서 주석에 대해서 이야기를 하고자 한다. 1. JavaDoc 주석 상기 소스코드를 보면 상단에 JavaDoc을 위한 주석이 포진해 있고 하위에는 각 스텝별로 주석이 달려있다. JavaDoc이 왜 필요할까 부터 우리는 생각을 해봐야 될 것 같다. JavaDoc은 소스코드상에달린 JavaDoc의 주석 규칙을 따르게 되면 코드를 작성하며 나타나는 코드 컴플리에서 변수가 무슨 형인지 어떤 역활을 하는 메서드인지 도움말을 표기해줄 수 있는 아주 유용한 도구이다. 이런 도구가 없으면 별도로 메서드의 선언과 그 파라메터에 대한 정의와 도움말을 작성해야되며 이는 실제 메서드의 정의와 작성의 일치.. 더보기
흑속에서 진주찾기 시작 juso.go.kr 에서 제공하는 주소검새 API를 이용하는 아주 기초적인 수준의 코드에서 어떻게 라이브러리화를 하고 TDD를 적용하는지 차례대로 발전해나가는 과정을 사내 교육을 위해서 틈틈히 준비하다 여기에도 한번 남겨본다. 본 소스는 초급개발자들에게 도움이 되는 과정일 것이다. 단순하게 어떤 기능만을 만들었던 내소스가 어떻게 가치를 가지는 라이브러리가 되어 재사용이 되고 TDD를 적용하여 매번 테스트의 편의성을 추구하게 되는지 보여준다. 단, 일련의 과정을 나누는 기준은 오로지 나의 경험에 의한 과정이기 때문에 이것이 항상 정답은 아니다. 여기서 이야기하고자 하는 것은 기능 자체에서만 봤다면 단순한 기능이지만 실제 재사용성을 어떻게 극대화 할 수 있는지 만약 기회가 된다면 이런식의 접근이 도움이.. 더보기
클린코드에 대한 단상 휴대폰으로 커뮤티니 앱에서 발견한 글이다. 읽어 보면서 나와 생각이 조금 다를 수 있다 판단하여 내 생각을 옮겨본다. 저분의 글에 대해서 댓글을 달고 토론을 할 수 있었으면 좋겠는데 그게 가능하지 않아서 여기에 남겨본다. "누군가 프로토타이핑 코드는 엔지니어링 가치를 포기하고 비지니스 가치를 선택한다고 판단할지 모르겠다. 하지만 내 생각은 다른다. 내가 아는 모든 엔지니어링의 정의는 제한된 자원을 목적에 맞게 가장 효율적으로 사용하는 것이라고 말한다. 상황에 따라선 프로토타이핑 코드가 최선의 엔지니어링일 수 있다" 라는 의견에 대한 반대 생각이다. 일단, '프로토타입코드'의 범위가 어디까지인지에 따라서 나는 반대가 될 수도 저 의견에 찬성이 될 수 있다고 생각한다. 탈고의 과정을 거친 코드인가? 개발자가.. 더보기
인터페이스에 대한 단상. 다양하게 해석되는 인터페이스 객체지향 프로그래밍에서 가장 핵심을 이루는 것은 클래스이다. 그리고그 옆에 인터페이스가 있다. 이 인터페이스라는 것에 대해서 다양한 해석이 존재한다. 처음에는 계약, 약속의 관점에서 이해를 하고 또 공부를 하였다. 어느 날은 다중상속이 불가능한 상황에서 인터페이스가 그 대안이라고 한다. 함수포인트가 없는 자바에서는 인터페이스가 그 대안이라고 말하기도 한다. 어디서인가는 추상화에 대해서 이야기를 한다. 추상화를 떠올리면 추상클래스도 있는데 이 추상클래스와 인터페이스를 비교하기도 한다. 인터페이스는 정말 다양하게 설명되고 다양하게 이해되고 있다. 하지만 마지막에 귀결되는 점은 인터페이스는 결국 클래스로 구현이 되어야 된다는 것이다. 추상클래스와 다른 점이라면 상속이라는 행위 없이.. 더보기
코드의 당위성 코드의 당위성 1. 당위성 회사내 후배개발자들에게 코딩관련 조언을 할때 자주하는 쓰는 단어가 '당위성'이다. '당(當) : 당연하다. 마주하다. 해당의, ...' '위(爲) : 하다. 되다, 위하다.' '성(性) : 성품, 성질' '당위성'란 당연히 가저야할 성질이라고 말할 수 있다. 2. 왜? 유명한 라이브러리 코드랑 내 코드는 뭔가 다를까? 프로그래밍에서도 당위성이 매우 중요하다는 사실은 OOP를 어느정도 이해하고 클래스와 클래스를 넘나들며 라이브러리 코드를 작성할 때 즘 감이 좀 오기 시작했다. 내가 반복작업하는 일들을 객체지향을 이용하니 수월하게 라이브러리화 할 수 있었고 그것을 반복 사용하여 프로그래밍을 하니 정말 효과가 탁월하였다. 특히 SI 프로젝트 프리렌서를 하러 가면 대한민구의 대다수 선.. 더보기
.net Winform 에서 코드 룩업하기 리펙토링 step6 Step6 편의사항 개선 C# 문법에는 확장메서드라는 매우 유용한 문법이 존재한다. 어떠한 객체의 기능을 상속이 아닌 방법으로 확장하는 방식이다. ComboBox에 BindCode라는 메서드가 존재한다면 콤보박스가 코드를 바인딩할 수 있다고 추정할 수 있다. 소스코드의 모양에서 훨씬 더 이해하기 쉬운 코드를 작성할 수 있다. public static class ComboBoxExtensionBindingCode { public static ICodeBind BindCode(this ComboBox comboBox, IEnumerable codeDatas) { return new ComboBoxCodeBinder(comboBox, codeDatas); } public static ICodeBind Bind.. 더보기
.net Winform 에서 코드 룩업하기 리펙토링 step5 Step5 스텝4 문제점 소스상으로 본다면 클래스로 역활을 분리하고 매울 깔끔한 소스의 모습이 유지가 되고 있다. 그리고 코드바인딩은 잘이루어지고 있으며, 각 화면에서 코드를 바인딩 하는 부분이 매우 손쉽게 불러다 쓸 수 있을 정도가 되고 있다. 하지만 ComboBoxCodeBinder 클래스자체는 문제를 해결을 했을지 몰라도 조금만 변화가 필요할 경우 ComboBoxCodeBinder는 엄청난 변경을 수반해야되는 상황에 내 몰리게 된다. 만약 코드를 바인딩하는 모습이 콤보가 아니라 에디트 박스 두개면 어떻게 할 것인가? 이와 같은 상황이 온다면 에디트 박스 두개에 바인딩 처리를 담당하는 클래스를 만들어야 할 것이다. 이부분은 스펙이 변경되었으니 그렇다고 치더라도. '구분1' 의 값을 참조하는 '구분2'.. 더보기