OOP에 대해서, 아는 사람은 다 알만한 이야기 및 이 글에서 인용하고 있는 大山님의 글 객체지향 프로그래밍에 대한 오해와 진실 1편, 2편을 읽고 씁니다(3년 전 글입니다). 딱히 관련 글이라기 보다는 읽고 떠오르는 생각들 몇 가지 + 제가 평소에 가지고 있던 생각을 늘어 놓으려고 합니다.

OOP를 바라보는 (유일하게 올바른 관점이 아닌 다양한 관점 중) 한 가지 관점에 대해 쓰고자 합니다. 하나의 대상을 한 측면에서만 보는 것 보다는 여러 측면에서 보면 좀 더 그 대상에 대해서 잘 알 수 있을 것이라고 생각하기 때문입니다. 제가 제시하고자 하는 관점은 다음과 같습니다:

“OOP는 무엇을 제거 혹은 대체하고자 하는가?”

 

1. 레퍼런스와 포인터 산술연산

예를 들어 자바나 C#의 레퍼런스(reference) 개념을 살펴보죠. 레퍼런스는 보안성, 편의성, GC 효율성 등을 향상시키기 위해 기존의 포인터 개념으로부터 산술연산(arithmatic operations)을 제거하였습니다. (결과적으로 보안성, 편의성, GC 효율성 등이 향상 되었는지 아닌지에 대한 판단은 각자 알아서)

포인터는 전지전능한 주소지칭 수단인데, 사실은 전지전능한 주소지칭 수단이 없어도 모든 프로그램을 작성할 수 있다는 것을 알게 된 것이죠(성능 이슈 등을 제외한다면).

 

2. 구조적 프로그래밍과 GOTO

또 다른 예로, 구조적 프로그래밍은 프로그램의 흐름을 제어하는 방법 중 goto를 제거(다익스트라 식으로 표현하자면 의미있는 프로그래머 독립 좌표계 – programmer independent coordinates - 를 훼손하는 장치들을 제거)하였습니다. 구조적 프로그래밍에서는 다음 세 가지 수단만으로 모든 프로그램의 흐름 제어를 구현해냅니다:

  • 순서(sequence) – 쉽게 말해서 코드가 위에서 아래로 실행되는 것
  • 선택(selection) – 쉽게 말해서 if와 switch
  • 반복(iteration) – 쉽게 말해서 while(혹은 do, until, for 등)

조건문(if)과 결합된 goto 문은 전지전능한 흐름제어 수단인데, 사실은 전지전능한 흐름제어 장치가 없어도 모든 프로그램을 작성할 수 있다는 것을 알게 된 것이죠(성능 이슈 등을 제외한다면).

 

3. OOP와 무엇?

드디어 본론인데요, OOP는 뭘 제거(혹은 대체)하였을까요? 혹자는 OOP가 구조적 프로그래밍을 대체한다고 말하는데 1/3 쯤 맞는 표현이라고 생각합니다. OOP는 구조적 프로그래밍의 세 가지 흐름 제어 수단(sequence, selection, iteration) 중에서 선택(selection) – 즉 if 문 – 을 제거합니다.

구조적 프로그래밍에 대한 설명에서 “조건문(if)과 결합된 goto 문은 전지전능한 흐름제어 수단”이라고 표현하였는데 이 중 goto는 제거되었으나 if는 살아남은 것이 구조적 프로그래밍이라면 if 까지도 제거하고자 하는 흐름을 OOP라고 보는 관점이 있을 수 있다는 것이죠.

오해의 소지가 있으니 잠깐 부연하자면, 모든 if를 제거해야 진정한 OOP라는 류의 주장은 아닙니다. 이에 대해서는 글 뒷부분에서 좀 더 이야기하도록 하겠습니다(진정한 OOP 따위 대체 뭔가요, 먹는거임? 우걱우걱).

그럼 조건문을 무엇으로 대체하고 있나요? 다형성(polymorphism)이죠. 그냥 다형성이라고 하면 너무 광범위하죠. 이를테면 파라메터 다형성(parametric/parameterized polymorphism)은 OOP 보다는 Generic Programming과 관련이 있습니다. OOP의 핵심이라고 하는 다형성은 특히나 서브타입 다형성(subtype polymorphism)을 말합니다. 이후에는 그냥 다형성이라고만 쓰겠습니다.

그럼 다형성이 조건문을 어떻게 대체하나요? 조건문이란 애초에 선택(selection)을 위한 것인데, 여기에서 선택이란 특정 변수의 값에 따라 이후에 실행할 코드가 달라지도록 하는 것을 말합니다. if 문에서는 조건절의 boolean 값에 따라 선택이 수행되는 것이고, 다형성에서는 메시지(message)에 담긴 파라메터(메시지를 받는 대상 개체도 파라메터로 칩시다. 파이선 self 마냥)에 따라 선택이 수행됩니다.


4. 다형성과 의존성 역전(DI – Depedency Inversion)

if를 다형성으로 대체하는 것이 정말 OOP를 특징지을만큼 중요한가요? 네, 전 그렇다고 생각합니다. 이쯤에서 밥 삼촌(Uncle Bob)을 인용해주어 (올바른) 권위에의 호소를 한 번 시도하도록 하겠습니다:

프로그램이 어떤 언어로 작성되었는지는 중요치 않습니다. 만약 의존성이 역전되어 있다면 이는 객체지향적 설계인 것입니다(It doesn't matter what language a program is written in. If its dependencies are inverted, it has an OO design).

--Robert Cecil Martin, Agile Software Development

if 얘기 하다말고 갑자기 왜 의존성 역전(DI) 떡밥이 나왔을까요? 그 전에, 애초에 의존성 역전이라고 할 때 이 역전이란 뭘 뒤집었다는 뜻일까요? David Parnas 큰형님이 지금으로부터 무려 37년 전에 쓴 논문에 답이 나옵니다:

첫째, 하위 계층의 서비스를 활용함으로써 시스템의 일부가 이득을 취했다(간결해졌다). 둘째 상위 계층을 들어내더라도 여전히 유용하고 사용 가능한 산출물(하위 계층 서비스들)이 남는다. (…중략…) 만약 하위 계층의 모듈이 상위 계층의 모듈을 사용하게끔 설계를 했다면 올바른 위계를 얻어낼 수 없었을 것이고 시스템의 일부만 들어내기가 훨씬 더 어려웠을 것이며, 계층이라는 말 자체가 의미를 잃게 될 것이다(First, parts of the system are benefited (simplified) because they use the services of lower levels. Second, we are able to cut off the upper levels and still have a usable and useful product. (..omitted...) If we had designed a system in which the "low level" modules made some use of the "high level" modules, we would not have the hierarchy, we would find it much harder to remove portions of the system, and "level" would not have much meaning in system).

--On the Criteria to be used in Decomposing Systems into Modules

시스템을 모듈화할 때 계층 간의 위계를 명확히 나누고 상위 계층이 하위 계층을 사용(즉 의존)하도록 만들어야 한다는 주장이며 이는 구조적 프로그래밍 혹은 모듈화 프로그래밍의 핵심 설계 원칙 중 하나입니다. 여기에서 상위 계층이란 좀 더 추상적인(abstract) 계층을 말하고 하위 계층이란 좀 더 구체적인(concrete) 계층을 말합니다. 그림으로 그려보면 아래와 같습니다:


모든 화살표가 위에서 아래로 내려가는 모습을 담고 있습니다. 의존성 역전이란 바로 이러한 의존관계를 뒤집는다는 의미로, 의존성 역전이 일어난 설계에서는 화살표 일부가 아래에서 위로 올라갑니다. UML로 치자면 속이 빈 삼각형 화살표(generalization 혹은 realization)로 표현합니다:


의존성 역전이 가능한 이유는 하위 계층이 상위 계층에 의존하면서도 순환 참조(circular dependency)가 일어나지 않게 만들어서 이를 통해 원래 David Parnas가 강조하던 목적(시스템의 일부를 쉽게 들어낼 수 있도록 하는 것)을 여전히 달성할 수 있게 되기 때문입니다.

순환 참조는 어떻게 끊나요? 즉, 위 그림의 속이 빈 삼각형 화살표는 언어에서 어떻게 표현될까요? 상속으로 표현합니다. 자바로 치자면 extends 혹은 implements가 되겠죠. 대표적 사례는? Observer Pattern. (다시 보니 위 그림은 별로 예쁘지 않군요. 대충 예쁜 의존성 역전의 사례를 상상해주세요)

잠깐 딴소리: 아마도 GoF 패턴책이 번역된 후로, 다른 커뮤니티는 모르겠고, 자바 개발자들 사이에서 extends는 꼬지고 implements는 좋은거라는 미신이 널리 퍼졌죠. 좀 과장하자면 구현 상속은 delegation(and/or composition)으로 대체하고 오직 타입 상속이 쵝오, 뭐 이런 얘기인데 “extends == 구현 상속”, “implements == 타입 상속”이라는 잘못된 공식이 오해의 원인이 아니었을까 추측해봅니다. 자바의 경우 “extends == 구현 상속+타입 상속”이라고 해야 맞습니다. 즉, implements이건 extends이건 타입 상속은 일어나는거죠. 단 extends를 했을 때는 구현 상속이 따라오게 되어 있는데 이 때의 문제를 잘 인지하고 해결할 수 있으면 그냥 쓰면 되는 것이죠.

이를테면 blackbox reuse vs. whitebox reuse 문제 같은 것이 있는데, 애초에 public/published 구분 잘 하고, protected 따위 안쓰고 메서드는 몽땅 public, 필드는 몽땅 private 같은 몇 가지 원칙들만 잘 지키면 문제의 소지가 크게 줄어듭니다.

다시 본론으로 돌아와서 지금까지의 얘기를 정리해보자면 이렇습니다:

  1. OOP는 구조적 프로그래밍의 selection(if/switch)을 서브타입 다형성으로 대체합니다.
  2. if를 서브타입 다형성으로 대체하면 하위 계층 뿐 아니라 상위 계층 까지도 더 잘 모듈화할 수 있습니다.
  3. 이러한 생각을 표현하는 말이 의존성 역전(DI) 입니다.

 

5. OOP의 나머지 개념들은 뭔가?

그럼 캡슐화(encapulation), 정보은닉(information hiding)은 안중요한가요? 중요합니다. 다만 OOP와 별 관련 없이 원래 있던 개념들입니다.

 

6. if는 다 잡아 없애야 진정한 OOP인가?

if 뿐만 아니라 switch도 다 없애야 진정한 OOP라능. 농담입니다. --;

두 가지를 이야기할 수 있겠습니다. 첫째, 진정한 OOP 아무 짝에도 쓸모 없습니다. 그런거 추구하지 마세요. 둘째, 상위 계층의 모듈화를 저해하는 if만 제거하세요. 다른 말로 바꿔서 표현하자면, 도메인 로직을 서술하기 위한 if는 남겨두세요.

 

7. OOP에 대하여 지금 서술한 관점이 킹왕짱인가?

저는 그렇다고 생각합니다. 하지만 “제일 좋은 관점”이랑 “완전한 관점”은 다른 것이죠. 제일 좋은 관점이라고 믿고 있기는 하지만 이 관점만으로 밀기엔 불충분하고 생각도 덜 다듬어진 것 같습니다. 따라서 여러 관점을 머리 속에 담아두고 그때그때 가져다 쓰는 식으로 생각하고 있습니다.

Trackback

http://alankang.tistory.com/trackback/249 관련글 쓰기
  1. 써니의 생각

    from sunnykwak's me2DAY 2009/06/21 16:25  삭제

    OOP란 조건문을 줄이는 것자주 참고하는 세분의 의견을 하나의 글에서 만나다! 본문에서 공부할 거 많고, NoKarma 님 딴죽도 틀린 말 아니고, 영회님 말마따나 논지에 찬성한다.

  2. 2009년 6월 23일 오전 0시 20분에 저장한 글입니다.

    from 썬의 또다른 이야기 2009/06/23 00:25  삭제

    구조적 프로그래밍에 익숙하신 분들에게는 한번쯤 생각하게 만드는 글입니다.OOP란 조건문(if)을 줄이는 것이 글에 아쉬운 점이 있습니다. 레이어 간의 디커플링(본문 : 각각 계층의 모듈화)과 OOP의 다형성은 직접적인 연관은 없습니다. ^^ 특히나, if문을 제거할 때는 if문 안에 내용들이 상하 계층(if문을 소유한 클래스가 상위 계층이고 if문

  3. 정말 다형성(서브타입)이 IF를 줄일수 있을까?

    from Insight.. 2009/06/25 03:08  삭제

    얼마전 강규영님의 글 "OOP란 조건문(if)을 줄이는 것"을 보고 정말 서브타입 다형성(subtype polymorphism) 이 if,else를 줄일수 있는가 생각해보았다. 예를들면 아래와 같은 클래스가 있다고 생각을 해보자. 식사 { 밥() { if (아침) { return 빵과우유; } else if (점심) { return 짜장면; } else if (저녁) { return 삼겹살; } } } 아침 점심 저녁을 비교하는 세개의 IF문이 존재..

  4. IF문 안쓰기 캠페인

    from Intellectual Wanderlust 2009/06/29 12:21  삭제

    얼마 전에 OOP란 조건문(if)을 줄이는 것이라는 글을 썼는데요, 그 이후로 몇몇 분들이 직/간접적으로(Google Reader의 공유 기능 혹은 이메일) 재미있는 사이트를 하나 알려주셨습니다. 바로 Anti-IF Compaign 입니다. IF를 쓰지 말고 서브타입 다형성을 쓰자는 캠페인입니다. 일부 페이지에 적힌 날짜를 보니 올해 4월 쯤 만들어진 것 같습니다. 캠페인 설명(what is the anti-if compaign) 부분을 대충 요약하..

Comments

  1. nokarma at 2009/06/21 15:14  댓글주소  수정/삭제  댓글쓰기

    이거 원래 아는 사람은 어차피 읽을 필요없이 알고, 모르던 사람은 이거 읽어봐도 무슨 말인지 모를듯...
    별로 audience friendly하지 않은것 같다는...

  2. 영회 at 2009/06/21 16:17  댓글주소  수정/삭제  댓글쓰기

    논지와 서술 모두 훌륭한 글이군요. :)

  3. 김우승 at 2009/06/22 01:38  댓글주소  수정/삭제  댓글쓰기

    왠지 까고 싶은 글

  4. 김우승 at 2009/06/22 02:47  댓글주소  수정/삭제  댓글쓰기

    예휴... 자기 전에 씼어야 하는데... 그리고 내일 회사나가야 하는데... 왜 후회할 답글을 써서...
    실수를 했지만 불쾌하시지 않다면 없애고 싶지는 않습니다. 그리고 다시 한번 제 느낌을 다시 떠올리고 정리해서 글을 남깁니다.

    글의 내용에서 의존성역전이라는 말은 매우 흥미로웠습니다. 이 분야 경험도 저보다 훨씬 풍부하실테고, 도움이 많이 되는 글이라고 생각합니다. 저도 if나 switch를 다형성이 많이 줄일 수 있다는 것에 대해서 생각해 본 바가 있었습니다.
    다르게 말하자면 if나 switch가 많다면 그것은 쓸데없이 중복된 요소가 있으며, 정리해서 깔끔해질 수 있는 여지가 있을 수 있다. 혹은 그런 냄새가 난다라고 생각합니다.

    다만 저는 용어에 대해서 쓸데없이 민감한 성격입니다. 이건 제 추측입니다만 다형성이라는 단어는 안정된 구조를 만들어내기 위하여 체계적인 자료형을 만들었던 정적자료형 언어에서 자료형은 고정되어 있다라는 기존 사고방식의 틀을 깨고 보다 유연한 형태가 요구되었기 때문에 만들어졌을거라고 생각합니다. 그에 비해 메시지 대한 개념은 아예 자료형 위주의 프로그래밍 사고방식을 벗어났기에 만들어질 수 있었던 단어가 아닐까라고 생각하고요. 다형성이라는 단어를 사용하시면서 다형성에 대한 설명은 메시지를 통해 하신게 아쉬웠습니다. 글에서 예를 든 프로그래밍 언어들은 정적 언어이고 글 전반에 사용되는 용어들이 정적언어에서 나온 단어들인만큼 설명도 그에 맞춰 해주셨다면 좋지 않을까 하는거죠.

    그리고 프로그래밍이 아닌 분석설계라는 다른 규모에서, 그리고 옛날 글에서 글의 논리를 가져오다보니 용어가 많이 대체됩니다. 용어에 대해서 집착하다보니 이런 것을 싫어하거든요. 하지만 다양한 곳에서 나온 요소들이 지식을 형성해 나가는 것이니 좋은 것일 겁니다. 하지만 제가 아직 이런 것을 보면 좋은거다라는 느낌은 받지 못합니다. 제가 이런 부분은 좀 폐쇄적이죠.

    저라면 if를 줄이는 것에 대한 결론을 '상위계층의 모듈화를 저해하는' 이라는 말이 아니라 '타입에 대해서 쓸데없이 일일이 참견하는' 정도로 끝내지 않았을까 싶습니다.

    글에서 이해가 안 가는 부분은 순환참조와 옵저버 패턴이 왜 나왔는지 모르겠습니다.

  5. 김우승 at 2009/06/22 02:58  댓글주소  수정/삭제  댓글쓰기

    이거 왜 안 지워지나했는데 tistory bug군요. 패스워드 입력은 8자까지 되는데 수정/삭제에서 패스워드 입력은 그 이상되니.... -_-.
    저는 글 쓸때 패스워드 8자 이상 입력했다고 착각했으니...

    그나저나 씼고, 자야겠네요.

    • alankang 2009/06/23 01:58  댓글주소  수정/삭제

      잘 읽었습니다. 용어에 대한 민감함은 취향이니 제가 무어라 말씀드릴 부분이 아닌 것 같습니다. 다형성에 대한 김우승님의 추측 또한 추측이니 제가 딱히 드릴 말씀이 없습니다.

      프로그래밍과 분석설계의 구분에 대해서는 마침 직전에 쓴 글이 있으니( http://alankang.tistory.com/248 ) 참고하시기 바랍니다. 전 분석/설계/코딩을 너무 명확히 구분하는 방식이 사고의 흐름을 저해하는 경우가 많다고 생각합니다.

      "타입에 대해서 참견하는"이라는 말에 대해서는... 직전 문단에서 소개해드린 링크에 있는 내용에 맞추어 여러 스케일로 한번 확장해보시기를 권합니다. 타입에 대해서 참견하지 않는다는 것이 결과적으로 시스템의 여러 부분에 어떠한 함의를 갖는지에 생각해보면 재미있을 것 같습니다. 저에겐 그러한 발상이 많은 도움이 되었습니다.

      그리고 말씀하신 "예전글"이란 아마도 Parnas의 논문을 말씀하시는 것일텐데 진심으로 일독을 권합니다. 이 논문은 모듈화와 정보 은닉(information hiding) 개념을 소개하고 있는 초기 문헌 중 하나입니다. IT가 아무리 빠르게 변한다 하더라도 분명 변하지 않는 가치들이 있고, 그것들이 오히려 더 중요한 경우가 많습니다. 현재 무슨 언어를 사용하고 계시건 간에 얻을 것이 분명 있을 것입니다. 언어이건 패러다임이건 갑자기 하늘에서 뚝 떨어지는 것이 아니니까요. (안 읽으면 큰일나는 것은 아니고, 읽으면 좋다는 정도로 이해해주세요)

      마지막으로, 순환참조와 옵저버에 대한 이야기는 몇 년 전에 위키에 적어놓은 것이 있으니 참고하시면 좋겠습니다: http://jania.pe.kr/aw/moin.cgi/DependencyInversionPrinciple (중간의 ASCII art로 표현된 다이어그램이 마침 옵저버 패턴과 동일한 형태입니다)

  6. 영후 at 2009/06/24 09:26  댓글주소  수정/삭제  댓글쓰기

    qt포스트네요

    qt = 큣 = cute

  7. 아스트랄 at 2009/06/26 01:38  댓글주소  수정/삭제  댓글쓰기

    글의 내용 자체에는 이의가 없는데, 오해의 소지가 있는 부분과 글이 취하는 관점이 좀 문제가 있어 보인다는 생각이 드네요. 세가지 정도를 지적할 수 있겠습니다.

    첫째, 순서-선택-반복과 Java의 특정 키워드를 등치시키고 있는데 제 생각엔 이것은 레벨상 맞지 않는 비교입니다. 순서-선택-반복은 그 어떠한 계산모델에서도 기본이 되는 구조로 되어 있습니다. 이 세 장치는 구조적 프로그래밍 방법론의 전유물이 아니라 어쨋든간에 컴퓨터가 계산하게 만들려면 이 세가지 규칙을 가져야 한다는 것이지요.

    무슨 얘기냐하면, OO패러다임에서는 선택이란 과정을 다형성이란 그 나름의 철학으로 "구현"하고 있는것이지 "제거"하는것이 아니란거죠. 즉 다형성을 통해 제거되는거은 if문이지, 선택과정이 아니라는거죠. 추상적 수준의 계산"공리"인 선택과정이 랭귀지 레벨의 if와 "동일"하다고 가정하면 안됩니다. 그런데 본문 내용은 이 부분에서 오해할 여지를 담고 있네요.

    둘째, if문을 대체하기 위해 OO의 다형성이 개발된것이 아니라 OO의 다형성이 나오면서 if가 대체된것이라고 생각합니다. 이것은 제가 잘 드는 예로, (뭐 좀 약간 나쁜 뉘앙스가 있긴 하지만) 이산화탄소 수치를 높이기 위해 자동차가 개발된것이 아니라 자동차가 개발되면서 이산화탄소 수치가 높아졌다는것이 더 맞는 표현이라는것과 통합니다.

    셋째, 본문 내용은 서브타입 다형성을 "if문의 제거"라는 관점으로 너무 편협하게 해석하는듯 합니다. 저는 그런 관점보다는 동일 input에 대해 객체들이 "다르게 반응"한다는 보다 보편화된 (그리고 교과서적인) 설명을 선호합니다. 여기선 이 사실이 중요하지, 다르게 반응하게 만들기 위해 if문이 언어차원에서 제거되었다는 사실이 중요한것 같진 않습니다. 이 점은 본문의 도입부에서 “OOP는 무엇을 제거 혹은 대체하고자 하는가?” 라는 질문이 썩 적절한 질문이 아니라는걸 의미합니다.

    아무튼 규영님 자신이 처음부터 논의를 이런 틀로 규정하고, 그 틀안에서 이야기를 풀어 나가려고 했다는 점이 인정되기 때문에 이런 관점은 그 나름의 유효성은 인정받을 수 있을것 같습니다. 그러나 OOP 혹은 더 넓게 생각해서 프로그래밍 패러다임을 무언가를 없앤다거나 랭귀지 차원의 어떤 키워드를 대체한다는식으로 조망하는것은 별로 건전한 방식이 아닌것 같습니다. 단, 간략하게 OO가 구조적 패러다임과 결정적으로 다른점을 드러내 설명하는 방식으로는 괜찮은것 같군요.

    • alankang 2009/06/26 01:51  댓글주소  수정/삭제

      첫째 논지에 대해: 선택-순서-반복을 특정 언어의 키워드와 연결지을 때 독자가 혼란스러울 수 있겠으나 goto 및 pointer 비유를 통해 충분히 설명을 하였으므로 대부분은 문제 없이 이해할 것이라 봅니다. goto나 if가 없어진다고 해서 jmp나 jpz가 없어지는게 아니라는 당연한 얘기를 할 필요는 없겠다고 생각해요. 어쨌든 아스트랄님도 이해했잖아요.

      둘째 논지에 대해: 이 글에서 시간의 선후 관계는 아웃 오브 안중입니다.

      셋째 논지에 대해: "if의 제거 혹은 대체"라는 말과 "다르게 반응한다"는 말은 논리적으로 다를 바 없습니다. 관점의 차이에 의해 사고에 영향을 줄 수는 있겠는데 이건 제 글이 애초에 목적하는 바 - 다른 관점을 제시하여 사고에 영향을 주는 것 - 입니다. 글의 서두에 밝힌 목적 부분을 참고해주세요.

      사족에 대해: "어느정도의 유효성을 인정"해주셔서 감사합니다. (아스트랄님 댓글의 불필요한 비아냥은 적절히 수정했습니다)

    • 아스트랄 2009/06/26 08:07  댓글주소  수정/삭제

      비아냥댄것까진 없었는데 그렇게 느꼈나보군요. 그렇다고 해서 덧글 내용을 손수 수정까지 하신건 좀 과한게 아닌지..

      전혀 모르는 사람이었으면 좀 더 강하게 나갔겠지만 피차의 입장을 어느정도 아는만큼 그렇게 하지 않으렵니다.

      둘째와 셋째의 지적에 대해 그냥 써 주신 정도의 답변을 기대하고 문제제기를 했던건 아닙니다만
      답변을 통해 아마 이 주제를 크게 중요하게 생각하지 않는듯 하는 모습이 보이므로
      이 부분은 "서로의 관점 차이를 확인했다" 정도로 결론 짓겠습니다.

      그럼~

    • alankang 2009/06/26 12:10  댓글주소  수정/삭제

      중요하게 생각하지 않는게 아니라 1) 주제와 상관이 없기도 하고 2) 아스트랄님과의 온라인토론은 별로 유익하지 않다는 것을 알기 때문에 피하는 것입니다.

      토론은 다음에 기회가 된다면 오프라인에서 하도록 합시다. 혹시 관련하여 또 하실 말씀이 있다면 "메일"을 주세요. "메일"입니다, 댓글말고: jania902@gmail.com

  8. logerC at 2009/10/30 19:53  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    스프링노트에서 클립노트에서 wave탔습니다. 우연히 OOP와 if의 관계에 대한 글을 읽었는데요.
    공감하는 글입니다. 그리고 위 댓글에서 [자동차가 보편화되서 이산화탄소가 많아졌다] 라는 예 처럼 OOP의 특징들로 인해 if와 switch가 사라지는거 같구요.
    이 게시내용 정말 좋은 내용입니다. if와 switch가 줄어드니까 확실히 코드가 좋아지죠.
    alankang님의 지식은 참 방대한듯 합니다. 한가지 부탁드릴게요. DI가 대충 윤곽은 잡히는 데 확실히 무엇을 말하는지 정확하게 이해가 가지 않네요. 그래서 구글링을 해야 할듯합니다.
    나중에 시간 나시면 DI에 대한 내용을 풀어 쓰심이 어떨가 합니다.

    잼있는 글과 댓글 읽고 지나갑니다~

    즐거운하루하루보내세요 ^-^

    • alankang 2009/10/30 23:05  댓글주소  수정/삭제

      안녕하세요? 저는 DI를 의존성 역전(Dependency Inversion 혹은 Inversion of Control)의 의미로 사용했는데 요즘은 DI라고 하면 의존성 주입(Dependency Injection)의 의미로 더 많이 쓰이는 것 같습니다. 사실 의존성 주입은 의존성 역전의 한가지 사례로 보아도 무방한 개념이라, 아주 엄밀한 논의에서가 아니라면 대충 섞어써도 대충 통하는 것 같아요.

  9. at 2009/11/04 17:18  댓글주소  수정/삭제  댓글쓰기

    비밀댓글 입니다

  10. zever at 2009/12/10 11:53  댓글주소  수정/삭제  댓글쓰기

    OOP라는 글을 오늘 첨 봤는데 목적이 뭔지 모르겠습니다ㅠ

    뭐땜에 IF 를 줄이는것인지?
    IF를 줄이면 속도라도 빨라지나요?
    제 생각엔 IF를 쓰시는 분들은 IF의 뜻을 잘 알고 사용하셔야될꺼 같은데요
    IF는 예외처리 할때 사용하는것이지 IF를 선택문으로 사용하시면 안된다는거죠
    IF i=1 이면 k="aa"
    Elseif i=2 이면 k="bb"
    이런식으로 사용하실꺼면 swich문을 사용하시고
    IF문을 사용하실때는
    IF IsNull(i) 이면 k="공백"
    이렇게만 사용해야된다는거죠

    혹시나 문제가 될만한 코드가 있다면 이걸 If문으로 예외처리를 해줘야지
    쓸때없이 여러개의 ElseIF 로 선택하게끔 하니 OOP라는 것이 나온거 같습니다.

    코딩 습관을 바꾸는게 우선이 아닐까 싶은데요?

    제가 요지를 잘못알고 얘길하는걸까요?

    왜 IF문을 줄이는것인지 궁금하네요

    • alankang 2009/12/10 13:16  댓글주소  수정/삭제

      if, else if, switch 상관 없이 조건문 일체에 대한 글입니다. 다양한 프로그램을 많이 만들어보시고, 좋은 코드에 대한 고민도 많이 하시고, 다른 사람이 만든 코드도 많이 읽어보시고... 그런 후에 다시 읽어보시면 공감하실 수 있을 것이라고 생각합니다.

      지금 당장 모르면 큰일나는 뭐 그런 종류의 글은 아니예요.

  1. alankang at

    댓글을 남겨주세요. 감사합니다.

< Newer     Older >