모듈화(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에 연결하는 중