C++ 클래스 Get / Set 메소드를 쓸때 유용한 점은 어떤것이 있습니까?

ikpil의 이미지

private 의 경우
Get / Set 을 정의하여 사용 하고 있습니다.

Get / Set 자체를 줄이기 위해서
1. 생성자에서 초기 셋팅후 변경되지 않는것은 Set에서 제외 한다.
2. Get 으로 얻어올 필요가 없는것은 제외 한다.

이렇게 하는데, 메소드들을 줄이려고 노력합니다.
(5개 정도 정의하는데도 ... 코드 중복이라는 느낌이 듭니다.)

Get / Set 메소드를 쓸때 유용한 점은 어떤것이 있습니까?
- 도통 이 부분을 모르겠습니다. 은닉화와 데이터 보호를 위하여 쓴다고 책에서 봤습니다만
데이터 보호를 위해서 쓴다는것은 좀 이상하게 들립니다. 왜냐하면, Set으로 하면 여기 저기서 값이 변경될수 있기 때문입니다.

klyx의 이미지

이전에 비슷한 내용의 글을 제가 올린 적이 있습니다. 한번 읽어보시면 조금 도움이 될지도 모르겠네요.
http://kldp.org/node/89756

ikpil의 이미지

최강입니다 많은 도움이 되었습니다.

semmal의 이미지

버그를 빨리 발견할 수 있도록 코딩할 필요가 있습니다.

현재 쓰이고 있는 프로그래밍 기법 또는 기술의 상당한 부분이 이러한 "버그 빨리 찾기"에 집중되어 있습니다.

데이터 은닉 또는 캡슐화는 기본적으로는 추상을 위해서 쓰이지만, 그 효과 중 하나로 디버그 할 때 굳이 찾아보지 않아도 되는 부분을 만들 수 있습니다.

캡슐화에 충실했다면, 하나의 버그는 캡슐안이나 밖에서만 일어납니다. 로직상의 실수가 아닌 다음에야 코딩 실수로 인해 둘 다 동시에 버그가 나는 일은 극히 드뭅니다.

하지만 캡슐화를 하더라도 멤버변수로 억세스를 하게되면, 더 많은 부분을 찾아봐야합니다. 하지만, get/set형태로 쓰게되면 데이터를 "쓸 때"와 "읽을 때"를 구별해서 그 버그의 성향에 맞춰서 한 가지만 찾아보면 됩니다. 또, get/set을 쓰면서도 코딩 실수로 인한 버그를 줄일 수도 있습니다. get을 써야할 때 set을 쓰면 바로 표가 나지만 변수를 쓰면 표가 잘 나지 않습니다.

물론 문법적으로 더 편한 방법이 있다면 꼭 get/set을 만들지 않아도 됩니다.

어쨌든, while과 for의 쓸 곳을 구별해서 쓰거나, struct와 class를 구별해서 쓰는 등의 노력도 이와 같이 디버그를 줄일 수 있는 관점에서 봐야할 필요가 있습니다.

프로그래밍을 할 때 "제약"이 있을 경우에 상당히 불편해지는 경우도 있지만, 오히려 매우 편해지는 경우도 있습니다. 대부분의 경우에 초보는 이런 제약에서 벗어나려고 노력을 많이 하고, 고수가 될 수록 스스로에게 제약을 걸려고 많이 노력을 하게 됩니다.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

ikpil의 이미지

위의 글을 다 읽어보니 semmal님께서 말씀하신데로 요약되는것을 발견하였습니다
감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.