nme.kr

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램:java:syntax [2022/01/01 00:06]
clayeryan@gmail.com [Constants]
프로그램:java:syntax [2023/07/13 17:29] (현재)
clayeryan@gmail.com ↷ 문서가 programmer:java:syntax에서 프로그램:java:syntax(으)로 이동되었습니다
줄 133: 줄 133:
 파일은 빈 줄이나 다른 구역임을 나타내주는 주석으로 나누어지는 여러 구역(section)들로 구성되어 있다.\\  파일은 빈 줄이나 다른 구역임을 나타내주는 주석으로 나누어지는 여러 구역(section)들로 구성되어 있다.\\ 
 2,000 라인을 넘는 파일은 이해하기가 쉽지 않기 때문에 될 수 있으면 피해야 한다.\\  2,000 라인을 넘는 파일은 이해하기가 쉽지 않기 때문에 될 수 있으면 피해야 한다.\\ 
-적절하게 구성된 자바 프로그램의 예제는 아래 "11장의 1절 자바 소스파일 예제에서 볼 수 있다.\\ +적절하게 구성된 자바 프로그램의 예제는 아래 [[syntax#자바 소스 파일 예제|3.11.1 자바 소스파일 예제]]에서 볼 수 있다.\\ 
  
 === 자바 소스 파일 === === 자바 소스 파일 ===
줄 175: 줄 175:
  
 ^순서^클래스/인터페이스 선언의 구성요소^  설명  ^  ^순서^클래스/인터페이스 선언의 구성요소^  설명  ^
-|1|문서화 주석|(/*... */) 이 주석이 포함하는 정보들은 아래 "5장의 2절 문서화(Documentation) 주석"을 참고 |+|1|문서화 주석|(/*... */) 이 주석이 포함하는 정보들은 아래 [[syntax#문서화(Documentation) 주석|3.5.2 문서화(Documentation) 주석]]을 참고 |
 |2|클래스/인터페이스 문|  | |2|클래스/인터페이스 문|  |
 |3|구현 주석|(/* ... */) 이 주석은 클래스/인터페이스 문서화 주석에 적합하지 않은 하나의 클래스/인터페이스에만 해당하는  정보들을 포함해야 한다.| |3|구현 주석|(/* ... */) 이 주석은 클래스/인터페이스 문서화 주석에 적합하지 않은 하나의 클래스/인터페이스에만 해당하는  정보들을 포함해야 한다.|
줄 284: 줄 284:
   *문서화 주석   *문서화 주석
  
-구현 주석은 /* ... */ 과 <nowiki>//</nowiki> 에 의해서 경계가 결정되는 C++에서의 주석과 동일하다. 또한 구현 주석은 각각의 구현에 대한 추가적인 설명이 필요할 때, 또는 코드를 주석 처리할 때 사용할 수 있다.+구현 주석은 /* ... */ 과 <nowiki>//</nowiki> 에 의해서 경계가 결정되는 <nowiki>C++</nowiki>에서의 주석과 동일하다. 또한 구현 주석은 각각의 구현에 대한 추가적인 설명이 필요할 때, 또는 코드를 주석 처리할 때 사용할 수 있다.
  
 문서화 주석은 단지 자바에서만 사용되며, /* ... */ 에 의해서 경계가 결정된다. 자바 소프트웨어에 포함되어 있는 javadoc 툴을 사용하면 문서화 주석을 포함하는 HTML 파일을 자동으로 만들 수 있다. 또한 문서화 주석은 소스 코드가 없는 개발자들도 읽고 이해할 수 있도록, 실제 구현된 코드와는 상관이 없는 코드의 명세 사항(specification)을 포함한다. 문서화 주석은 단지 자바에서만 사용되며, /* ... */ 에 의해서 경계가 결정된다. 자바 소프트웨어에 포함되어 있는 javadoc 툴을 사용하면 문서화 주석을 포함하는 HTML 파일을 자동으로 만들 수 있다. 또한 문서화 주석은 소스 코드가 없는 개발자들도 읽고 이해할 수 있도록, 실제 구현된 코드와는 상관이 없는 코드의 명세 사항(specification)을 포함한다.
줄 299: 줄 299:
 프로그램은 다음과 같은 4가지 형식의 구현 주석을 포함할 수 있다. 프로그램은 다음과 같은 4가지 형식의 구현 주석을 포함할 수 있다.
  
-  - **블록(Block) 주석** +  - 블록(Block) 주석 
-  - ** 한 줄(Single-Line) 주석** +  - 한 줄(Single-Line) 주석 
-  - **꼬리(Trailing) 주석** +  - 꼬리(Trailing) 주석 
-  - **줄 끝(End-Of-Line) 주석**+  - 줄 끝(End-Of-Line) 주석
  
 ==블록(Block) 주석== ==블록(Block) 주석==
줄 370: 줄 370:
 </code> </code>
 === 문서화(Documentation) 주석 === === 문서화(Documentation) 주석 ===
-* 여기에 나오는 주석들은 아래 "11장 1절 자바 소스 파일 예제를 참고하기 바란다.+* 여기에 나오는 주석들은 아래 [[syntax#자바 소스 파일 예제|3.11.1 자바 소스파일 예제]]를 참고하기 바란다.
  
 문서화 주석은 다음 5가지를 설명한다. 문서화 주석은 다음 5가지를 설명한다.
줄 763: 줄 763:
 === 인스턴스 변수와 클래스 변수를 외부에 노출하지 말고 대신 접근을 제공 === === 인스턴스 변수와 클래스 변수를 외부에 노출하지 말고 대신 접근을 제공 ===
  
 +인스턴스 변수 또는 클래스 변수를 합당한 이유없이 public으로 선언하지 말자. 인스턴스 변수들은 명시적으로 선언될 필요가 없는 경우가 많다.
 +
 +인스턴스 변수가 public으로 선언되는 것이 적절한 경우는 클래스 자체가 어떤 동작(behavior)을 가지지 않는 데이터 구조일(data structure) 경우이다. 다시 말해서 만약 class 대신 struct를 사용해야 하는 경우라면(만약 Java가 struct를 지원한다면) class의 인스턴스 변수들을 public으로 선언하는 것이 적합하다.
 === 클래스 변수와 클래스 메서드는 클래스 이름을 사용하여 호출 === === 클래스 변수와 클래스 메서드는 클래스 이름을 사용하여 호출 ===
 +
 +클래스(static) 변수 또는 클래스 메서드를 호출하기 위해서 객체를 사용하는 것을 피해야 한다. 대신에 클래스 이름을 사용해라
 +
 +<code java>
 +classMethod();             // 좋은 사용법
 +AClass.classMethod();      // 좋은 사용법
 +anObject.classMethod();    // 나쁜 사용법
 +</code>
  
 === 숫자는 바로 사용하지 않고 선언해서 변수 이름으로 접근 === === 숫자는 바로 사용하지 않고 선언해서 변수 이름으로 접근 ===
 +
 +숫자 상수는 카운트 값으로 for 루프에 나타나는 -1, 0, 1을 제외하고는 숫자 자체를 코드에 사용하지 않는다.
 +
  
 === 변수에 값을 할당할 때 주의할 것들 === === 변수에 값을 할당할 때 주의할 것들 ===
  
 +하나의 문(statement)에서 같은 값을 여러 개의 변수들에 할당하지 말자(이렇게 하면 읽기가 어렵게 된다)
 +
 +<code java>
 +fooBar.fChar = barFoo.lchar = 'c'; // 이렇게 사용하지 말자
 +</code>
 +
 +비교 연산자(equality operator: ==)와 혼동되기 쉬운 곳에 할당 연산자(assignment operator: =)를 사용하지 말자
 +
 +<code java>
 +// 이렇게 사용하지 말자 (자바가 허용하지 않음)
 +if (c++ = d++) {
 +    ...
 +}
 +
 +// 다음과 같이 써야 한다
 +if ((c++ = d++) != 0) {
 +    ...
 +}
 +</code>
 +
 +실행시 성능 향상을 위해서 할당문(assignment statement)안에 또 다른 할당문을 사용하지 말자
 +
 +<code java>
 +// 이렇게 사용하지 말자
 +d = (a = b + c) + r;
 +
 +// 다음과 같이 써야 한다
 +a = b + c;        
 +d = a + r;
 +</code>
 === 그 외 신경써야 할 것들 === === 그 외 신경써야 할 것들 ===
  
 == 괄호 == == 괄호 ==
  
 +연산자 우선순위 문제를 피하기 위해서 복합 연산자를 포함하는 경우에는 자유롭게 괄호를 사용하는 것이 좋은 생각이다(작성자는 연산자 우선 순위를 확실하게 알고 있다고 할지라도, 다른 프로그래머에게는 생소할 수 있다는 것을 기억하자).
 +
 +<code java>
 +if (a == b && c == d)     // 이렇게 사용하지 말자
 +if ((a == b) && (c == d)) // 이렇게 사용하자
 +</code>
 == 반환 값 == == 반환 값 ==
 +
 +프로그램의 구조와 목적이 일치해야 한다.
 +
 +<code java>
 +// 이렇게 사용하지 말자
 +if (booleanExpression) {
 +    return true;
 +} else {
 +    return false;
 +}
 +</code>
 +
 +<code java>
 +// 다음과 같이 써야 한다
 +return booleanExpression;
 +// 이렇게 사용하지 말자
 +if (condition) {
 +    return x;
 +}
 +return y;
 +</code>
 +
 +<code java>
 +// 다음과 같이 써야 한다
 +return (condition ? x : y);
 +</code>
  
 == 조건 연산자 '?' 이전에 나오는 식(expression) == == 조건 연산자 '?' 이전에 나오는 식(expression) ==
  
 삼항 연산자(ternary operator - ?:) 에서 ? 이전에 이항 연산자(binary operator)를 포함하는 식(expression)이 있는 경우에는, 꼭 괄호를 사용해야 한다. 삼항 연산자(ternary operator - ?:) 에서 ? 이전에 이항 연산자(binary operator)를 포함하는 식(expression)이 있는 경우에는, 꼭 괄호를 사용해야 한다.
 +
 <code>(x >= 0) ? x : -x;</code> <code>(x >= 0) ? x : -x;</code>