C++에서 getter 이름에 대한 뉘앙스 차이

parkon의 이미지

ㄴ안녕하세요,

사소하다면 한없이 사소한 문제인데요,

어떤 class에서 여러 변수들에 대해 getter/setter들이 있고
setter들은
SetName(name), SetValue(value) 등등 Set으로 시작하기로 했을 때
getter들은
1. Name(), Value(), Size(), XXX(), 이런 형식하고,
2. GetName(), GetValue(), GetSize(), GetXXX(), 이런 형식이 있을텐데

이 둘의 뉘앙스 차이가 있으려나요?

질문을 다시 말해 이 두 방식을 혼용한다면, 어느 경우에 1번을, 어느 경우에 2번을 쓰면 좋을까요?

한편으론 당연히 존재하는 건 1번, 있을수도 없을수도 있는건 2번,
아님 자주 쓰이는 함수는 1번, 어쩌다 한번씩 쓰이는 건 2번,
아님 setter가 있는건 2번, 없는건 1번,
아님 완전 작성자 맘대로,
그것도 아님 제가 모르는 뭔가 일것 같은데,

생각나시는 대로 의견을 말씀해 주시면 도움이 되겠습니다.

라스코니의 이미지

이렇게 생각해 봤습니다. C++은 잘 모릅니다만.

1번 같은 경우는 어떤 객체의 단순 프로퍼티나 형변환 정보를 전달할 때, 예를들어 obj.name(), obj.address() 등이 되겠네요.

2번 같은 경우는 적어도 단순 프로퍼티가 아닌 2개 이상의 프로퍼티를 결합해서 나온 정보를 요구할 때, 예를들면 obj.getLastUpdatedMembers(), obj.getCountOfFemaleMembers() 등등으로요.

그냥 C++이나 OOP에 문외한인 사람의 의견입니다. 저는 이런식으로 C 코딩시에 적용하는 것 같네요.

parkon의 이미지

답글 감사합니다. 저도 비슷하게 생각하긴 하는데 항상 어렵네요.
예전엔 개인적으로 2번을 선호했었는데, 그래서 그렇게 구현 했었는데,
요즘 그 놈의 너무 많은 Get이 징글스럽게 느껴져서 1번으로 바꿔볼 까
생각중입니다.

ymir의 이미지

class 이름은 명사, method 는 동사로 하는 게 많이 쓰는 convention 이죠.
특별한 이유가 있는 게 아니라면, 굳이 그걸 피해서 코딩할 필요는 없지 않나 생각되네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

익명 사용자의 이미지

프로퍼티로 보면 get을 안붙이는거고
메소드로 보면 get을 붙이는거
프로퍼티랑 메소드랑 다른데 뭔소리냐 할 수 있지만
프로퍼티로 보는 입장은 변수에 람다함수가 들어가 있다고 생각하는 것

parkon의 이미지

이 댓글을 이제야 봤네요. 인스턴스의 이름은 GetName()으로, 클래스 이름은 ClassName()으로 받는 라이브러리가 있던데
아마 님의 의견대로 인스턴스의 이름은 뭔가 장난칠 여지가 있어 GetName()으로 받고,
클래스 이름은 고유의 프로퍼티로 해석했을 수도 있겠단 생각입니다.
댓글 감사드립니다.

awidesky의 이미지

우선 이름 길이가 길어지는 게 귀찮아서인 경우를 제외하고 순수 뉘앙스만 따지자면...
아무래도 get이 붙는 경우 단순 프로퍼티 반환이라기보다는 어떠한 동작이 존재할지 모른다는 뉘앙스를 조금 풍기는 듯 합니다.
예시로 그냥 return someValue면 get 없이, db나 어떤 데이터에서 자르고 때오는 등 다양한 동작을 해서 가져오는 경우는 get을 붙인다는 느낌이 나네요.
다만 이는 언제까지나 뉘앙스일 뿐, 오히려 그냥 다 get을 붙이는 게 가독성이나 인터페이스 측면에서는 더 좋을 듯 합니다.

댓글 달기

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