,
OOP를 지향하기 위해서

작은 시도? 랄 수 있는 몇 가지 팁을 정리해봤습니다.

이미 OOP를 잘 구상하고 계신 분들이라면 숙지하고 있는 내용일 테지만

아직 OOP를 어려워하는 분들에게는 자그마한 이끌림이 되지 않을까 합니다.



1. parent, root 는 절대 사용금지.

없는 셈 치십시오.

OOP의 기본 원칙은 "재사용"과 "확장"인데 parent라 함은

OOP의 기본 관점인 "나"를 벗어난다는 뜻입니다.

하나의 클래스는 자기만 잘하면 됩니다.

내가 아닌 내 부모의 무언가를 참조하면 안된다는 것이지요.

부모의 무언가를 사용해서 움직이는 객체라면

부모가 바뀌면 못 쓰겠죠?

바로 그겁니다.

재사용할 수 없다는 뜻이지요.

parent를 써서 가져오던 값이나 함수는

이벤트나 메소드를 통해서 전달을 받으세요.

그러면 한결 OOP스러워집니다.



2. 클래스하나만 따로 예제로 만들어보세요.

지금 만드는 프로젝트에서 사용해야만 테스트 할 수 있다면

실패한 클래스입니다.

따로 예제를 만들어서 한 클래스만 테스트할 수 있도록 만들어 보십시오.

만들어진다면 그게 바로 재사용한 겁니다.

그만큼 튼튼한 클래스라는 이야기지요.

그리고 그렇게 만든 예제는 꼭 따로 저장해놓으시구요~



3. 다른 사람이 만든 클래스를 사용해보십시요.

잘하는 사람의 클래스를 사용해보라는게 아닙니다.

성공에서 배우는것보다 실패에서 배우는게 더 많은 법입니다.

이제 막 뭐 만들어보고 카페나 블로그에 올린 사람들의 소스를 보고

클래스를 만들었다면 그 클래스를 사용해보십시요.

뭐가 불편한지 왜 난 저 클래스를 어떻게 쓰는지 모르는지...

곰곰히 생각해보고 자신의 클래스를 되돌아 보는게 도움이 많이 됩니다.



4. 내 클래스를 다른 사람에게 사용해보게 하세요.

내가 짠 코드는 내가 볼땐 완벽합니다.

그러나 다른 사람이 볼때는 그렇지 않을수도 있습니다.

원래 버그는 모르는 사람이 더 잘 찾아냅니다.

내가 만든 클래스를 다른 사람에게 사용해보라고 부탁해보고

어디서 버벅대는지

어느 메소드를 잘못쓰는지

변수나 메소드 명을 잘못 이해하지 않는지 살펴보세요.

정말 큰 힘이 됩니다.



5. 내 클래스에 public 이 몇번이나 쓰였나 확인해보세요.

public 변수나 메소드가 많다는 것은 원래는 역할이 많다는 뜻이겠지만

사실상 public 메소드가 많을 수록 그 클래스는 "구려"지기 마련입니다.

구린 클래스는 쓰기도 힘들고 뭐하나 하려면 메소드 찾기도 복잡하죠.

public 메소드를 최대한 줄여보십시요.

getWidth() 와 getVisibleWidth() 메소드는

getWidth( visibleArea: Boolean = false ) 로 합칠 수 잇겠죠?

이런식으로 최대한 줄이다보면 어떤 식으로 public 을 구성해야되는지 감이 잡힐 겁니다.



6. public 변수, 메소드에는 약어를 쓰지 마세요.

strN, getSN(), appVer, n_part

무슨 변수, 메소드인지 아시겠어요?

모릅니다. 써놓은 저도 모르거든요 -_-+

내부에서 쓰는 메소드야 주구장창 특수문자로 하건, 한글로 하건 잘 돌아만 간다면 문제가 없겠죠.

그러나 public 으로 열어놓은 변수나 메소드는 나를 위한게 아니라

나를 사용하게될 다른 사람을 위한 것들입니다.

그렇기 때문에 다른 사람도 알아들을 수 있는 메소드명을 써야된다는 것이죠.

numberToString, getSerialNumber(), applicationVersion, numberOfPart

라고 풀어쓰면 누가 보더라도 알 수 있겠죠.



7. 내가 만든 클래스를 extends 해서 다른 클래스를 만들어보세요.

이건 "확장성"과 관련될수도 있지만

사실 제가 말씀드리고 싶은건

자신이 만든 클래스에 대한 검증절차입니다.

확장해서 사용하는데 큰 불편함이 없다면 잘만든 클래스입니다.

하지만 확장해서 사용하려면 이런 저런 값들이 바뀌어야 되는데

private 으로 숨겨져 있거나

값이 메소드안에 묶여있어서 바꿀수가 없다거나 하면

확장하기 편하지 않은 메소드라는 뜻이 됩니다.

private function calc(): int
{
     return 3 + 5;
}

이런 메소드가 있다고 예를 들면

protected var a: int = 3;
protected var b: int = 5;
private function calc(): int
{
     return a + b;
}

이렇게 바꿔준다면 확장하는 클래스에서는 a, b 값만 바꿔주면 되겠지요.

요론게 확장입니다.

자신의 메소드중에서 이렇게 수정할 수 있을만한게 없을까 살펴보세요~


8. 억지로 어렵게 짜려고 하지 마세요.

고수들의 코드를 보면 막 알 수 없는 공식들과

메소드들, 특이한 표현들을 보면 막 멋져보이고

뭔가 있어보이고 그렇잖아요 그죠?

근데 절대 나한테는 좋은게 아닙니다.

그러한 것들은 "코드유희"라고 합니다.

무언가를 구현하는데 있어서 조금더 빠르고

조금 더 효율을 높이기 위해서 짜는 코드들이거나

좀 특이하고 개성있는 코드를 만들어보기 위한 코드들입니다.

대표적인게 Proxy 클래스나 Dictionary 클래스를 남발하는 경우죠.

물론 정확한 용도야 있지만 멋있어보이려고 쓰는 경우가 대부분입니다.

Proxy 클래스가 얼마나 느린데요 -_-+

이러한 코드들은 이해나 사용성을 위한 코드들이 아닙니다.

우리가 코드를 짜면서 퍼포먼스를 추구한다는것은

정말 대단한 과욕입니다.

퍼포먼스를 추구하려면 프로젝트 성격자체가 퍼포먼스가 매우 중요하거나

모든 Flash API를 자기 수족처럼 부릴 수 있을때에야 퍼포먼스를 추구할 수 있는 것입니다.

공부하는 입장에서 괴짜코드 흉내내면

정말 돌이킬 수 없는 습관을 가지게 될 수도 있습니다.

정석대로 하십시요 ㅎㅎ

가장 좋은 예제는 F1의 예제들입니다.



도움이 좀 되실려나 모르겠네용.

3.0을 처음 익히는데 여러가지 어려운 용어들때문에 고초를 겪는 분들이나

OOP를 공부하고 싶은데 딱히 답이 안보이는 분들에게

도움을 드리고자 쓴 글입니다.

저도 공부하면서 느꼈던거라 심히 공감되시는 분들도 있으리라 예상합니다^^



하지만 무엇보다 중요한건 시간을 길게보고 욕심내지않고

하나씩 차근차근 내것으로 만들어나가는게 중요합니다.

너무 고수들의 코드나 오픈소스 코드를 보고 따라하면서

공부하려면 토나옵니다.




...




...




...




...




...




...




이렇게요...









저작자 표시 비영리 동일 조건 변경 허락
신고
  1. 이전 댓글 더보기
  2. hika 2009.03.05 12:09 신고

    글 잘봤어요. 입문자들에게 참 유용한 지침인듯.

  3. 탕슉 2009.03.05 12:23 신고

    잘 읽었습니다. 감사합니다.^^

  4. Favicon of http://jjmg.tistory.com 메타콰이어 2009.03.05 12:35 신고

    와우 감사합니다 :)

  5. 꽃게장세트 2009.03.05 12:56 신고

    고마워요~

  6. 박정호 2009.03.05 13:34 신고

    내용 잘 봤습니다.
    대부분 공감가는 말이고요. 하나를 덧붙인다면 클래스를 작성할때 최대한 property 사용을 지양하고 파라미터를 많이 사용하길 권장합니다.

  7. 임병철 2009.03.05 14:04 신고

    잘 읽었어요 ~ 정말 좋은 내용인거 같아요 .!

  8. Favicon of http://blog.naver.com/setimets 쫑쫑쫑 2009.03.05 16:04 신고

    클래스간의 객체 참조 -,.- 제일 어려운거 같아요 ㅠ,.ㅠ

    으헝 ㅋ ~ 좋은 자료 감사합니다 ^-^

  9. Favicon of http://scaryama.com 스카야마 2009.03.05 16:43 신고

    2번.2번. 정말 중요하다고 생각해요
    단위테스트 !

  10. 2009.03.05 21:27 신고

    정말 중요한 내용인데 프로젝트 오픈날짜에 맞추다보면 정말 위에것처럼 하기 힘들어지죠... 그래도 제 소스에 대해 다시 한번 살펴볼 수 있는 글이 된것 같아요!

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.03.09 20:06 신고

      이런 OOP의 현실적인 어려움때문제 자바쪽에서는 AOP라는 개발방법이 유행이"었"데요.

  11. 2009.03.05 22:11 신고

    ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
    너무 웃기고 내용은 정말 유익하네요 ^^
    감사합니다 우야꼬님.. 요즘 우야꼬님 책 보며 공부하고있는데
    AIR 가 너무 재밌어질려고 합니다 더불어 감사드립니다 ^^

  12. 2009.03.06 09:12

    비밀댓글입니다

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.03.09 20:07 신고

      아 ProductManager 라는 클래스입니다.
      adobe.net.* 으로 임포트 시키면 사용할 수 있는 클래스인데
      날코딩으로 사용하기에는 상당히 힘듭니다.
      홧팅하시길!!

  13. Favicon of http://hitmedia.tistory.com 서연아빠 2009.03.06 10:48 신고

    누구나 공감할 만한 내용 원츄

  14. Favicon of http://skizo.tistory.com SKIZO 2009.03.06 11:31 신고

    내용 굳 +_+b
    특히 2, 3, 4번 강츄~

    (트래백 걸어보고 싶어서 글쓰고 걸어봤다가,,, 내용 달라서 링크 풀려고 하는데 방법 몰라 -_ㅜ)

  15. Favicon of http://kindmonkey.pe.kr 날아보자 2009.03.06 22:42 신고

    와...정말 공감..또 새롭게 알게된..! 감사합니다..으흣

  16. 닥서클 2009.03.07 00:27 신고

    와 감사합니다~ 컨퍼런스때도 좋은 이야기 잘들었었구요^^

  17. Favicon of http://www.ddongkang.com 동강 2009.03.08 01:20 신고

    8번이 제일 공감.. 자신은 효율적이라고 생각하지만, 남들이 볼때는 전혀 알아 먹지 못한다는;;; 단점이 있지요

  18. Blackiz 2009.03.08 19:10 신고

    오오 좋은 내용입니다!!
    역시 우야꼬님....ㅎㅎ

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.03.09 20:09 신고

      "역시"라는 형용사는 과분합니다. 가끔 글 쓰다보면 뽀록으로 좋은 글이 나올뿐... ㅋ

  19. Favicon of http://jidolstar.com/blog 지돌스타 2009.03.13 09:51 신고

    정말 좋은글입니다.
    OOP는 데이터 캡슐화, 다형성, 상속성이 기본인 것 같아요. 이것을 얼마나 잘 이해하고 활용할 수 있느냐에 따라 사용성과 확장성이 함께 따라가는듯 싶습니다. 이런 것을 공부하기 위해 스스로 다이어그램도 그려보고 디자인 패턴도 공부해보면 스스로 깨닫게 되는 것 같아요. 백문의 불여일타라고 하니깐... 열심히 보고 열심히 쳐봐야 알 수 있는 세계~ ^^

  20. 엄한넘 2009.05.06 18:26 신고

    안녕하세요...
    제가 지금 딱 알것같으면서도 막연히 OOP에 대한 두려움을 가지고 있는 상황입니다.
    우야꼬님 책 보면서 열심히 공부중입니다..^^ AIR 재밌고... 멋지네요..^^
    제가 주로 데스크탑에서만 실행해서 쓰는 오프라인 컨텐츠를 만드는데..
    늘 파일 읽고 쓰기 때문에... 솔루션 도움으로 통신 작업을 통해서 했거든요...
    AIR로 제가 하던 동일한 컨텐츠를 제작할 수 있다면 좋겠네요..^^
    AIR로 가능한 부분인지도 아직은 모르겠지만..
    열심히 공부해보겠습니다..^^ 좋은 교재 감사합니다...

  21. Favicon of http://cyd707.kr CyD707 2009.06.29 20:42 신고

    좋은 글 잘봤습니다^^
    글을 읽는데 누가 창으로 푹푹 찌르는 기분이군요..ㅎㅎㅎ

+ Recent posts

티스토리 툴바