Java 기초 문법 완벽 정리

1.1 주석 (Annotation)

주석은 코드에 대한 설명을 추가하는 용도로 사용되며, 컴파일과 실행에는 전혀 영향을 주지 않습니다. Java에서는 세 가지 유형의 주석을 제공합니다.

  • 한 줄 주석: // 로 시작하며, 줄이 바뀌면 주석이 종료됩니다.
  • 여러 줄 주석: /* 로 시작하여 */ 로 종료됩니다.
  • 문서 주석: /** 로 시작하여 */ 로 종료되며, javadoc 도구를 통해 API 문서를 생성할 때 사용됩니다. 주로 클래스, 메서드, 필드에 대한 설명을 작성합니다.

문서 주석에서 자주 사용되는 태그는 다음과 같습니다.

  • @author: 작성자 정보를 표시합니다.
  • @version: 버전 정보를 표시합니다.
  • @param: 메서드의 매개변수를 설명합니다.
  • @return: 메서드의 반환값을 설명합니다.
  • @throws/@exception: 메서드에서 발생 가능한 예외를 설명합니다.

다음은 주석을 활용한 예시 코드입니다.

/**
 * 이 클래스는 주석 사용법을 설명합니다.
 * @author dev
 * @version 1.0
 */
public class AnnotationDemo {
    /**
     * 프로그램의 진입점입니다.
     * @param args 명령행 인자
     */
    public static void main(String[] args) {
        // 이 부분은 한 줄 주석입니다.
        System.out.println("Hello, Java!");
        /*
         * 이 부분은
         * 여러 줄 주석입니다.
         */
    }
}

문서 주석을 사용하여 API 문서를 생성하려면 터미널에서 다음 명령어를 실행합니다.

javadoc -d doc AnnotationDemo.java

1.2 식별자 (Identifier)

식별자는 클래스, 변수, 메서드, 패키지 등의 이름을 지정할 때 사용하는 문자 시퀀스입니다. Java에서 식별자를 정의하는 규칙은 다음과 같습니다.

  • 알파벳, 숫자, 밑줄(_), 달러 기호($)로 구성될 수 있습니다. (Java는 유니코드를 지원하므로, 한글도 사용 가능합니다.)
  • 숫자로 시작할 수 없습니다.
  • Java 키워드(public, class, void 등)는 사용할 수 없습니다.
  • 대소문자를 구분합니다. (Foofoo는 서로 다른 식별자입니다.)
  • 길이 제한은 없으나, 의미를 알 수 있도록 간결하게 작성하는 것이 좋습니다.

일반적으로 다음과 같은 명명 규칙을 따릅니다.

  • 클래스/인터페이스: 각 단어의 첫 글자를 대문자로 작성합니다. (예: MyClass, UserService)
  • 변수/메서드: 첫 단어는 소문자로, 이후 단어는 첫 글자를 대문자로 작성합니다. (예: userName, calculateTotal())
  • 패키지: 모든 단어를 소문자로 작성하며, 점(.)으로 구분합니다. (예: com.example.myapp)
  • 상수: 모든 단어를 대문자로 작성하고, 밑줄(_)로 구분합니다. (예: MAX_VALUE, PI)

올바른 식별자 예시: userAge, _count, $value, data1

잘못된 식별자 예시: 1stValue (숫자로 시작), my-name (하이픈 사용), class (키워드 사용)

1.3 키워드 (Keyword)

키워드는 Java 언어에서 특별한 의미를 가지도록 미리 정의된 단어입니다. 식별자로 사용할 수 없습니다. 모든 키워드는 소문자로 이루어져 있습니다.

주요 키워드 예시: public, private, class, static, void, if, else, for, while, new, return, int, double, boolean

총 50개의 키워드가 있으며, constgoto는 사용되지 않는 예약어입니다. true, false, null은 키워드는 아니지만 리터럴 값으로 특별한 의미를 갖습니다.

1.4 리터럴 (Literal)

리터럴은 코드에서 직접 표현되는 데이터 값입니다. Java에서 지원하는 주요 리터럴 종류는 다음과 같습니다.

  • 정수 리터럴: 10, -5, 0L (long 타입)
  • 실수 리터럴: 3.14, -0.5f (float 타입)
  • 문자 리터럴: 'A', '1', '가'
  • 문자열 리터럴: "Hello", "Java"
  • 불리언 리터럴: true, false

1.5 데이터 타입 (Data Type)

Java 데이터 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나뉩니다.

기본형 (Primitive Type)

Java는 8가지 기본형 데이터 타입을 제공합니다.

타입크기범위기본값
byte1 byte-128 ~ 1270
short2 bytes-32,768 ~ 32,7670
int4 bytes-2,147,483,648 ~ 2,147,483,6470
long8 bytes-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070L
float4 bytes약 ±3.4E+38F (유효 자릿수 6-7)0.0f
double8 bytes약 ±1.8E+308 (유효 자릿수 15)0.0d
boolean1 byte (JVM 의존적)true / falsefalse
char2 bytes0 ~ 65,535 (유니코드)'\u0000'

참조형의 기본값은 null입니다.

자동 타입 변환 (Implicit Conversion)

작은 범위의 타입에서 큰 범위의 타입으로는 자동 변환됩니다. 변환 방향은 다음과 같습니다.

byteshortintlongfloatdouble

char 타입도 int로 자동 변환될 수 있습니다.

int num = 'A'; // 'A'의 유니코드 값 65가 저장됨
double d = 10; // 10이 10.0으로 자동 변환

강제 타입 변환 (Explicit Casting)

큰 범위의 타입을 작은 범위의 타입으로 변환할 때는 개발자가 직접 형변환 연산자를 사용해야 하며, 데이터 손실이 발생할 수 있습니다.

int big = 100;
byte small = (byte) big; // 강제 형변환

정수 리터럴과 타입

정수 리터럴은 기본적으로 int 타입으로 간주됩니다. long 타입을 명시하려면 접미사 L 또는 l을 붙입니다.

long bigNumber = 2147483648L; // int 범위를 초과하므로 L 필요

byteshort 타입 변수에 리터럴 값을 할당할 때, 리터럴 값이 해당 타입의 범위 내에 있다면 컴파일러가 자동으로 허용합니다.

byte b = 100; // 허용됨 (100은 byte 범위 내)
// byte b2 = 200; // 오류 (200은 byte 범위 초과)

연산 시 타입 변환 규칙

  • byte, short, char 타입이 연산에 사용되면 자동으로 int로 변환됩니다.
  • 서로 다른 타입이 혼합된 연산에서는 가장 큰 타입으로 변환되어 연산이 수행됩니다.
int result = 10 / 3; // 결과는 3 (int 나눗셈)
double result2 = 10.0 / 3; // 결과는 3.333...

1.6 변수 (Variable)

변수는 데이터를 저장하기 위한 메모리 공간의 이름입니다. 변수를 사용하면 코드의 재사용성과 가독성이 향상됩니다.

변수 선언 및 초기화

int age;         // 선언
age = 25;        // 초기화
int score = 90;  // 선언과 동시에 초기화

변수 사용 시 주의사항

  • 변수는 반드시 선언 후에 사용해야 합니다.
  • 변수는 사용 전에 초기화되어야 합니다.
  • 변수는 자신이 선언된 블록({}) 내에서만 유효합니다. (스코프)
  • 같은 스코프 내에서는 동일한 이름의 변수를 선언할 수 없습니다.

상수 (final 변수)

final 키워드를 사용하면 값을 변경할 수 없는 상수가 됩니다.

final double PI = 3.14159;
// PI = 3.14; // 오류! final 변수는 재할당 불가

1.7 연산자 (Operator)

Java는 다양한 연산자를 제공합니다.

산술 연산자

+, -, *, /, %, ++, --

int a = 10, b = 3;
System.out.println(a + b);  // 13
System.out.println(a % b);  // 1 (나머지)
System.out.println(a++);    // 10 (후위 증가)
System.out.println(++a);    // 12 (전위 증가)

관계 연산자

>, >=, <, <=, ==, !=

boolean isEqual = (a == b); // false
boolean isGreater = (a > b); // true

논리 연산자

&& (AND), || (OR), ! (NOT)

boolean result = (a > 5) && (b < 10); // true
boolean result2 = (a > 5) || (b > 10); // true

&&||는 단축 평가(short-circuit evaluation)를 지원하여, 앞의 조건만으로 결과가 결정되면 뒤의 조건을 평가하지 않습니다.

할당 연산자

=, +=, -=, *=, /=, %=

int x = 5;
x += 3; // x = x + 3; 와 동일, 결과: 8

삼항 연산자

(조건) ? (참일 때 값) : (거짓일 때 값)

int max = (a > b) ? a : b;

1.8 진법과 데이터 저장

컴퓨터는 모든 데이터를 이진수로 저장합니다. Java는 정수 리터럴을 다양한 진법으로 표현할 수 있습니다.

int decimal = 10;     // 10진수
int binary = 0b1010;  // 2진수 (0b로 시작)
int octal = 012;      // 8진수 (0으로 시작)
int hex = 0xA;        // 16진수 (0x로 시작)

음수 표현 (2의 보수)

Java는 음수를 2의 보수 방식으로 표현합니다. 예를 들어, -55의 이진 표현을 비트 반전 후 1을 더하여 표현합니다.

부동소수점

floatdouble은 IEEE 754 표준을 따라 부동소수점 방식으로 저장됩니다. 이 때문에 정확한 10진수 연산이 필요한 경우 BigDecimal 클래스를 사용하는 것이 좋습니다.

double result = 0.1 + 0.2;
System.out.println(result); // 0.30000000000000004 (부동소수점 오차)

문자 저장

char 타입은 유니코드 문자를 저장하며, 내부적으로는 0부터 65,535 사이의 정수로 저장됩니다.

char letter = 'A';
int code = (int) letter; // 65
char anotherLetter = 66; // 'B'

태그: java 주석 식별자 키워드 리터럴

7월 22일 04:28에 게시됨