모듈화(OOP)가 잘 안되어 있다는 증거들

아래 사항에 포함될 경우 “항상이 아닌 대체로 모듈화가 잘 안되어 있다” 라고 생각 합니다.

  1. 한 class의 private function 개수가 10개 이상 넘어 간다.
  2. 한 class의 public function 개수가 5개 이상 넘어 간다.
  3. 한 function 의 line 이 50줄 이상 넘어간다.
  4. 한 class의 line 이 500줄 이상 넘어간다.
  5. sub class 에서 super class 기능의 일부분만 사용 한다.
  6. 애매하게 비슷한 중복되는 코드가 많다.
  7. 한 폴더에 10개 이상으로 소스 파일이 너무 많다.
  8. 두번 이상 상속된 경우가 있다. 즉 sub class의 super class의 super class 이상 있는 경우

1, 2, 3, 4 설명

1, 2, 3, 4 는 거의 같은 의미 입니다. 한 class 또는 한 function 이 복잡 하다는 것을 의미 합니다. 소프트웨어 개발은 복잡하고, 그 복잡함을 해결하는 방법이 OOP 입니다. 복잡한 기능을 분석하여 분류하면 좀더 단순한 기능들의 집합입니다. 즉 OOP 를 한다는 것은 복잡한 기능을 단순한 기능들로 분류하여 해결 하겠다는 것입니다

한 class 의 목적과 기능, 동작 등은 단순해야 합니다. 한 class의 function 이 많다는 의미는 그 만큼 해당 class 의 동작이 복잡 하다는 증거 입니다. 즉 그 class 는 더 단순한 기능으로 분류가 필요할 가능성이 큽니다.

예를 들어 아래와 같이 모듈화가 안된 class 를 만든다고 합시다.

class Drawer {
	
	public void setLine(Point start, Point end){...}

	public void drawLine(){...}

	public void setCircle(Point center, int radius){...}

	public void drawCircle(){...}

	public void setSquare(....){...}
	
	public void drawSquare(){...}

	public void setOrbit(....){...}

	public void drawOrbit(){...}

	public void setPolygon(){...}

	public void drawPolygon{...}

	...
}

한 class 에 너무 많은 기능을 하고 있는 거죠.
이렇게 만들면 1, 2, 3, 4 문제에 대부분 해당 될 것입니다.
아래와 같이 모듈화가 되면 1, 2, 3, 4 문제에 속할 가능성은 낮아 집니다.

class Line {

	public void Line(Point start, Point end){...}

	public void draw() {...}
}

class Circle {

	public void Circle(Point center, int raius){...}

	public void draw() {...}
}

class Square {

	public void Square(...){...}

	public void draw() {...}
}

class Orbit {

	public void Orbit(...){...}

	public void draw() {...}
}

class Polygon {

	public void Polygon(...){...}

	public void draw() {...}
}

한 class private 10개, public 5개, 한 function 50 줄 이상, 한 class line 이 500줄 이상은 물론 제 주관적인 경험이고 이것은 사람마다 다를 것입니다. 저러한 경우 제 경험상 더 모듈화가 가능 하였습니다. 항상 그런것은 아니고 90% 정도 확룔로 대체로 그러 하였습니다.
function 50줄 이상 관련하여 추가 설명하면… 모니터 화면에 한 function 의 소스가 모두 나와야 합니다. function 너무 길어져 스크롤해서 보면 그만큼 이해하기 어렵습니다.


5번의 경우, 해당 url 을 참고하세요.

https://crazygun22.com/2019/04/12/%EA%B0%80%EB%8F%85%EC%84%B1-%EB%86%92%EC%9D%80-%EC%BD%94%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EB%B0%A9%EB%B2%95-4-%EC%9E%98%EB%AA%BB%EB%90%9C-%EC%83%81%EC%86%8D-%ED%94%BC%ED%95%98%EA%B8%B0/

6번의 경우

말 그대로 중복된 코드가 많다는 것은 모듈화가 안 되었다는 거죠.

7번의 경우

적어놓고 보니 OOP 와는 사실 상관이 없지만, 모듈화를 위해 프로젝트를 소스파일을 기능이나 목적 별로 분류해야 좋기는 합니다. 오픈 소스 최강자 linux kernel 보면 OOP 도 잘 되어 있지만, 폴더별로 파일이 잘 정리 되어 있습니다.

8번의 경우

sub class를 이해하기 위해 그 super class를 분석해야 하는 경우도 많죠. 상속 단계가 많아지면 당연히 가독성이 떨어 집니다. 이것은 code complete 책에도 나오는 내용 입니다.

모듈화(OOP)가 잘 안되어 있다는 증거들”의 6개의 생각

  1. 분명 경험에서 나온 훌륭한 기준일텐데요, 아무래도 읽는 사람은 주관적인 생각으로 밖에 읽히지 않습니다. 그렇게 생각하시는 이유도 적어주시면 좋을거 같습니다.

    좋아요

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중