'좋은 코드'에 해당되는 글 2건

  1. 2008.04.05 Automatic Properties
  2. 2007.11.26 좋은 코드에 대한 나의 생각

자바에서는 getter과 setter을 이용하여 클래스 객체에 상태값을 설정하거나, 상태값을 읽어들인다. 일반적으로 클래스의 멤버 변수를 private로 설정한 후 각각의 값을 getter과 setter로 재 정의 하는 것은 사실 노가다(?) 스러운 작업이라고 스스로 생각을 했었다. 특히 맴버 변수가 5개 이상으로 늘어나면, 이는 정말 코드의 양만 늘이고, 사용에는 별 도움이 안되는 작업을 반복적으로 해야 한다는 사실에 불평을 하곤 했다. 나중에 Eclipse에서 자동으로 생성해주는  Dialog를 무척 고마와 했다.(아래 그림 참조)

Generate Getter and Setter dialog

.Net이나 Visual Basic에서는 getter, setter 대신에 Properties를 사용한다. 물론 getter와 setter 형태로도 만들수 있지만, 사실 이는 다른 메소드와 큰 차이는 없다.
Properties는 마치 변수에 대입하거나, 변수에서 값을 읽는 것과 큰 차이가 없어, 직관적이고 사용하기 편리하다.

하지만, 이를 정의 하기 위해서는 자바의 getter, setter처럼 여러 줄에 걸쳐서 코드를 작성하기 때문에 불편하기는 마찬가지이다. 물론 Visual Basic 6에서는 툴을 이용하여 정의하기도 했지만, 습관적으로 Coyp/Paste 메소드를 이용해서 복사후 수정하는 것이 일반적인 사용법이었다.

Properties는 아래와 같은 형태로 정의하게 된다. Java의 getter,setter과 크게 다르지 않다. 아래의 코드는 C#으로 되어 있어서 Java를 아는 사람도 어렵지 않게 이해할수 있을 것이다.

    public class Person {

       
private string _firstName;
        private string
_lastName;
        private int
_age;
       
        public string
FirstName {

           
get {
               
return _firstName;
           
}
           
set {
                _firstName
= value;
           
}
        }

       
public string LastName {

           
get {
               
return _lastName;
           
}
           
set {
                _lastName
= value;
           
}
        }       
       
       
public int Age {

           
get {
               
return _age;
           
}
           
set {
                _age
= value;
           
}
        }
    }

이를 Automatic Properties로 바꾸면 다음과 같다. 보기 편하고 심플하다. 그리고 Private로 변수를 클래스 내에 선언해서 사용할 필요도 없다. 물로 내부적으로 연산 처리하는 경우는 조금 다를수 있다.

    public class Person {
   
       
public string FirstName {
           
get; set;
       
}

       
public string LastName {
           
get; set;
       
}        
       
       
public int Age {
           
get; set;
       
}
    }

이를 좀더 가독성 있도록 쓰고 사용하려면, 아래와 같이 고쳐서 사용하면 된다.

    public class Person {
       
public string FirstName { get; set; }
       
public string LastName  { get; set; }        
       
public int    Age       { get; set; }
    }


그럼 이것은 뭘 뜻하는 것인지 한번 생각해 보시길... 퀴즈 아닌 퀴즈



The simple is good!




 

Posted by 행복상자

좋은 코드에 대한 나의 생각

내가 개발자의 길로 들어선 이후로, 내가 봐도 제법 괜찮다고 하는 코드를 짠것은 쾌 오래전의 일인듯하다.  내가 공들여서 개발할 코드라도, 약 2개월만 다른 프로젝트를 하다보면, 내 것인지 아니면 동료의 것인지 한 눈에 알아보기 힘들다.
평소에는 본인의 코드를 보고 자화자찬하는 사람은 드물것이다.
정말 오래전의 일인데, 나는 내가 짠 코드를 보고, 감탄했던 적이 있었다. 어느날 내가 우연찮게 봤던 코드였는데, 군더거기 하나 없는 코드였고, 구조도 복잡하지 않았다. 이렇게 코드의 구조를 가져갈 수 있다니 하고 감탄했었다. 지금 생각하면 참 남사스럽고 부끄럽다.

일반적으로 사람들은 자신에게는 무척 관대하지만, 이것이 내것인지 남의 것인지 구분이 안되는 상황에서는 객관적인다. 그런데 나는 내 코드인지도 모르고 누군지 모르지만 참 잘짰다고 속으로 생각한 것이었다. 그리고는 소스 코드가 내가 몇달전에 작성한 것을 알고는 참 멋적기도 했지만 기분이 좋았다. 나르시즘에 빠진것인지도 모른다. 요즘말로는 환자다.
하지만, 좋은 코드는 사람을 행복하게도 해준다.

내가 현재의 직장에 입사한 후로 여러가지 다양한 프로젝트을 했지만, 결코 많은 시간을 투자하지는 못하고 좋은 코드도 많이 만들어 내지 못했다. 그러나 좋은 코드를 만들고자 하는 욕심은 누구보다 많다. 내가 생각하는 좋은 코드는 사실 다른 개발자들이 생각하는 것의 범주를 뛰어 넘지는 못한다. 왜냐하면, 나의 능력 밖의 코드는 만들어 내지 못한다. 다른 개발자를 설득하기에는 아직 힘이 부족하다. 사실 문인들을 글로 말하지만, 개발자는 코드로 말한다.
하지만,

1. 좋은 코드는 읽기에 불편함이 없어야하고
2. 내용을 전달함에 난해해야 하지 않으며,
3. 그 구조가 간결해야 한다.
4. 그리고 변경에 민첩하게 반응 할 수 있어야 한다.

좋은 코드를 생성하는 방법은 여러가지가 있지만, 나는 리펙토링을 좋아하는 편이다. 같은 목적을 가진 코드에 변화를 주면서 조금씩 조금씩 코드가 좋아지는 것을 보면 기분이 새롭다. 이것은 나를 만족시키는 방법이고 나를 위한 것이지만, 내 혼을 한땀 한땀 새겨 넣는 이 행위는 장인의 마음과 다르지 않다.
Posted by 행복상자