Class가 필요한 이유가 뭔지요...? (c++)

JuEUS-U의 이미지

비판하는건 아닙니다 -_-;;;

몇날 몇일을 클래스의 필요성에대해서
설명을 들어봤지만
클래스의 필요성은 그다지 모르겠습니다....

클래스가 쓰이는 확실한 용례는 없는지요?

(클래스 이론은 이미 다 공부했습니다...;;;)

정태영의 이미지

JuEUS-U wrote:
비판하는건 아닙니다 -_-;;;

몇날 몇일을 클래스의 필요성에대해서
설명을 들어봤지만
클래스의 필요성은 그다지 모르겠습니다....

클래스가 쓰이는 확실한 용례는 없는지요?

(클래스 이론은 이미 다 공부했습니다...;;;)

간단하게 GUI 를 생각해보시면 class 가 얼마나 유용한지 알게 됩니다... 생각해보세요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

wslee의 이미지

구조화 프로그래밍은
함수가 중심이고

객체 프로그래밍은
데이터가 중심에 있는건데.

덩치가 큰 프로그램들은 이리저리 보내고 처리해야할
데이터가 워낙 방대하고 다양하고 덩치가 커서.
구조화 방식으로 그 데이터를 이리저리 함수에 패스해가며
처리하는 식으로 프로그래밍을 하다보면 매우 복잡해 집니다.

그래서 그 복잡한 데이터가 중심에 우뚝 서있는
즉 클래스
즉즉 객체 프로그래밍이 나온거죠.

pok의 이미지

함수의 파라미터를 줄여주는것만으로도 클래스 만세입니다.
더불어 if/switch등을 줄여주는것으로 클래스 만만세입니다.

Kroisse의 이미지

구조적 프로그래밍을 하신다면 작업의 구성요소보다는 작업의 흐름이 중요할테니 객체나 클래스 따위 필요 없어요 :D

하지만 작업에 참여하는 구성요소들을 중심으로 생각하는 객체지향 프로그래밍을 하신다면 그 구성요소들, 즉, '객체'를 만들 필요성이 생길 테고, 그걸 편하게 해 주는 게 클래스이지요.

IsExist의 이미지

문제의 본질에 따라서 어느것이 더 편할때가 있습니다.

효율성으로 따저야지 방식의 논리로 따질것이 못됩니다.

언어가 사고의 경직을 부를 수 있습니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

익명 사용자의 이미지

Quote:
클래스가 쓰이는 확실한 용례는 없는지요?

디자인 패턴을 공부해보세요

ssehoony의 이미지

저도 클래스가 꼭 필요하나 라는 것에 많이 고민을 했습니다.

socket1->connect();
이렇게 하나
connect(socket1);
이렇게 하나 저렇게 하나 그게 그거라는 생각이 들더군요.

근데 폴리모피즘(다형성)이 왜 존재하는 것인가? 에 대한 공부를 했을 때 클래스의 가치를 알게 됐습니다.
위의 지나가던 손님의 말씀 처럼 디자인 패턴을 공부해 보면 잘 구성된 클래스들은 설계를 복잡하게 만들기는 하지만 유지, 보수, 확장을 할 때 그 진가가 들어 난다는 것을 느끼실 겁니다.

가끔 개발자의 가장 강력한 무기는 Ctrl+C, Ctrl+V 라고 하는데, 이건 그냥 우스게 이야기 일뿐 잘 구성된 디자인에서는 이런게 필요없죠.
copy and paste 를 2~3번 하다보면 이걸 폴리모피즘을 이용하면 편하게 수정 가능한 방법을 모색할 수 있고(아니면 템플릿을 이용한 제네릭프로그래밍으로), 그걸 적용하기 위해서는 기존 소스를 많이 고쳐야 하지만 일단 수정해 놓으면 추후 유지 보수에 편합니다.

사실, C++ 은 C 를 기반으로 문법 위주(기본 라이브러리는 문법의 확장에 비하면 부족하다고 생각합니다)로 확장했기 때문에 클래스의 활용법에 대한 것을 배우려면 C++ 의 문법 공부 외에도 많은 공부가 필요합니다.
하지만, C++ 과 클래스 디자인에 대한 많은 연구가 이루어져서 어느정도 성숙기라고 할 수 있는 지금, 그런 좋은 이론들을 적용한 C# 과 그에 따른 .NET Framework 를 공부해 보시면 클래스는 이렇게 사용하기 위해 존재하는 것이구나를 느끼실 겁니다.

익명 사용자의 이미지

구조체 쓰는 이유랑 비슷한데.. 님은 구조체 왜 쓰시나요?
클래스는 거기에 자신의 데이터멤버(구조체의 필드)를 조작할 수 있는 함수를 정의할수있다는겁니다.
왜 함수를 구조체 안에 정의하냐면 내부데이터를 숨길려는 목적이 큽니다.
워낙에 인간들이 변수들을 함부로 쓰는지라 통제가 필요했다 이거죠.

꼬마앙마의 이미지

구조적 프로그래밍을 먼저 배우신 분들은 왜 클래스를 사용하는지 이해하는게 어렵습니다.

하지만 반면에 객체지향적 프로그래밍을 먼저 배우신 분들은 왜 구조적 프로그래밍을 해야 하는지 이해하기 어렵죠.

그래서 많은 분들이 프로그래밍을 처음 시작할때부터 객체지향적 프로그래밍을 먼저 배워라고 하는 겁니다.

freezm7의 이미지

JuEUS-U wrote:
비판하는건 아닙니다 -_-;;;

몇날 몇일을 클래스의 필요성에대해서
설명을 들어봤지만
클래스의 필요성은 그다지 모르겠습니다....

클래스가 쓰이는 확실한 용례는 없는지요?

(클래스 이론은 이미 다 공부했습니다...;;;)

클래스 없이 polymorphism 어떻게 구현하시렵니까?
물론 할수는 있겠죠.

하지만 할수 있다고 똑같다고 한다면 뭐하려고 C 를 쓸까요. 어셈블리로도 C가 하는거 다 할수 있는데요 ^^;

즐겁게 살아 볼까나~*

익명 사용자의 이미지

JuEUS-U wrote:
비판하는건 아닙니다 -_-;;;

몇날 몇일을 클래스의 필요성에대해서
설명을 들어봤지만
클래스의 필요성은 그다지 모르겠습니다....

클래스가 쓰이는 확실한 용례는 없는지요?

(클래스 이론은 이미 다 공부했습니다...;;;)

제가 아는 한 가장 화끈한 설명은 Head First Java라는 책의 62 페이지에 있습니다.

only2sea의 이미지

ssehoony wrote:
가끔 개발자의 가장 강력한 무기는 Ctrl+C, Ctrl+V 라고 하는데,

여담이지만 사실 ctrl+c 와 ctrl+v 비슷한 기능을 구현하려고 해도 객체지향의 polymorphism 같은것이 있으면 아주 좋죠.

예를 들어서 문서 편집기를 만들었는데 그림과 글자, 표 등을 한꺼번에 카피했다가 붙여 넣는다고 할 때... 객체지향적으로 구현하면 좋겠죠.

꼭 그런게 아니라고 해도 주로 책 등지에서 많이 다루는 아주 상투적인 내용으로 본다면... 그래픽 툴 같은게 예제로 나옵니다. 원, 사각형, 선 등등의 조합으로 그림을 저장하는 (벡터 방식이라고 하던가요...) 그래픽 툴에서 파일로 저장할 때 이걸 이용한다면 깔끔하게 처리가 됩니다. 물론 객체지향 패러다임이 없다고 해도 구현은 됩니다. 함수 포인터를 쓴다거나 해서 가상함수가 하는 것처럼 구현해도 되겠죠. 그러나 확대, 축소, 돌리기 등등 여러가지 자꾸자꾸 늘어난다면 언어적인 차원에서 좀 더 깔끔하게 지원해주면 좋겠죠...

JuEUS-U wrote:
비판하는건 아닙니다 -_-;;;

몇날 몇일을 클래스의 필요성에대해서
설명을 들어봤지만
클래스의 필요성은 그다지 모르겠습니다....

클래스가 쓰이는 확실한 용례는 없는지요?

(클래스 이론은 이미 다 공부했습니다...;; ;)

처음 하시는 분들에게 와닿기 쉬운 곳에서 찾아보면 C의 printf와 std::cout의 차이를 생각해봐도 파워의 차이가 보이죠.

음... 쉽게 쉽게 설명할게요. 내가 만든 BigInt 같은게 printf에서는 찍히게 할 수 없어도 std::cout 에서는 찍히게 할 수 있죠. 물론 BigIntToStr 같은 함수를 만들어서 printf의 "%s"로 찍을 수는 있겠지만 원래 int를 쓰다가 어느 순간에 BigInt로 바꿨다고 할 때 출력부분마다 코드를 고칠 필요가 없겠죠. 그 외에 새로 생기는 다른 것들도 코드 수정 필요없이 같은 형태로 사용가능하게 되겠죠.

물론 이런 것들은 시작에 불과합니다.

꼬마앙마 wrote:
구조적 프로그래밍을 먼저 배우신 분들은 왜 클래스를 사용하는지 이해하는게 어렵습니다.

하지만 반면에 객체지향적 프로그래밍을 먼저 배우신 분들은 왜 구조적 프로그래밍을 해야 하는지 이해하기 어렵죠.

그래서 많은 분들이 프로그래밍을 처음 시작할때부터 객체지향적 프로그래밍을 먼저 배워라고 하는 겁니다.

제 생각은 조금 다릅니다. 오히려 반대일지도 모르겠습니다. 객체지향적 프로그래밍만 배운 사람들 중에서 어떤 사람들은 왜 클래스를 쓰는지도 모르고 쓰고 있습니다. 오히려 그거 없이 쓰던 사람들이 큰 프로그램을 작성하다가 몇몇 가지의 상황을 경험하고 또 필요성을 느끼고 객체지향을 배운다면 얘기가 달라지겠지요. 그리고 객체지향적인 것과 구조적인 것은 양립불가능하지 않다고 생각합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.