자바 혹은 c++에서 변수나 객체 선언은 주로 어디서 하나요?

vudghkzm의 이미지

C는 변수의 선언을 반드시 코드 처음 부분에다가 해야 하지만 자바 혹은 C++은 코드 중간중간에 할 수가 있는건 다들 아시고 계실건데요..

그래서 저는 그때 그때 변수나 객체가 필요할 때 마다 선언하고 사용하고 있긴 한데요. 나중에 코드를 볼때나 다른 코드를 분석할 때 선언이 중간중간에 되어 있으면 보기가 약간 불편할때가 있더라구요..

많은 분들은 주로 선언을 윗 부분에 몰아서 하시는 지 아니면 그때 그때 하시는 지 궁금하네요..

다크슈테펜의 이미지

저는 그냥 소스 전체적으로 사용되는 객체나 변수는 클래스 하나를 만들어서 거기서 사용하구요 그리고 그 클래스에서만 사용되는 변수나 객체는 클래스 맨 앞쪽에 하는 편입니다.뭐 그때 그때마다 사용하는 경우도 있지만 대체로 이렇게 합니다.

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

kihongss의 이미지

vudghkzm wrote:
C는 변수의 선언을 반드시 코드 처음 부분에다가 해야 하지만 자바 혹은 C++은 코드 중간중간에 할 수가 있는건 다들 아시고 계실건데요..

그래서 저는 그때 그때 변수나 객체가 필요할 때 마다 선언하고 사용하고 있긴 한데요. 나중에 코드를 볼때나 다른 코드를 분석할 때 선언이 중간중간에 되어 있으면 보기가 약간 불편할때가 있더라구요..

많은 분들은 주로 선언을 윗 부분에 몰아서 하시는 지 아니면 그때 그때 하시는 지 궁금하네요..

변수 필요할때마나, 윗부분으로 올라가, 변수 선언하고 그러면
더 불편하지 않나요? 한동안 C++로만 코딩하다가
요즘 C로 코딩할 일이 생겼는데, C++의
변수선언방식에 한동안 익숙해져 있다보니, 이런점이 불편하더군요.
Efficient C++에서 본 내용인데,
C에서는 어쩔수 없지만, C++에서는 메모리 효율상,
필요할때 변수나 객체를 선언해 쓰라고 하더군요.
관련 로직 근처에 변수가 선언되어 있으면 저는 더 알아보기 쉽더라구요.

doldori의 이미지

C++에서는 선언과 동시에 초기화를 하는 것이 권장되는 스타일입니다.
이것은 초기값이 명확하게 정해질 때까지 선언을 최대한 미루라는 뜻도 됩니다.
다음 글을 참고하십시오.

Should I declare locals in the middle of a function or at the top?

저는 처음에 몰아서 선언을 하는 것이 더 불편하던데요. (코딩할 때, 코드를 읽을 때
모두.) 그리고 C에서도 중간에 변수를 선언할 수 있습니다.

yielding의 이미지

저는 흠 변수가 주석이 필요한 경우, 나중에 봤을때 헤깔릴 수 있는것은 함수의 시작에서 잘 정의된 규칙으로 선언을 하고 그렇지 않은경우는 코드 중간중간에 간단하게 씁니다.
그리고 RAII idiom, boost::(shared_ptr, scoped_ptr) 가능하면 애용합니다

Life rushes on, we are distracted

다크슈테펜의 이미지

음 저도 임시적은 거는 코드 중간에서 생성합니다.
다만 클래스 전역에서 사용하는거나 아니면 나름대로 의미가 있다고 생각하는 객체나 변수는 맨처음 클래스 선두에서 생성시킵니다.

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

익명 사용자의 이미지

코드 중간에 선언하는 데에 한 표 날립니다.. 위에 분 말씀대로 effective c++에서도 나왔던 내용으로 기억합니다. 아얘 한 챕터가 할당되었던 거 같은데.. '변수 선언은 최대한 늦춰라' 이런 식으로요.

변수를 중간에 선언하면 최대한 늦게 메모리를 잡음으로써 코드가 그 지점에 미치지 않는 경우 할당이 이뤄지지 않게 하는 등 효율 향상을 기대할 수도 있습니다. 가독성 면에서도 더 좋다고 생각합니다.

죠커의 이미지

vudghkzm wrote:
C는 변수의 선언을 반드시 코드 처음 부분에다가 해야 하지만 자바 혹은 C++은 코드 중간중간에 할 수가 있는건 다들 아시고 계실건데요..

C99에서는 중간에도 정의할 수 있습니다.

댓글 달기

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