자바의 언어구조 - 2일차

은채의 성장통·2025년 5월 28일

KCC정보통신

목록 보기
2/30
post-thumbnail

1.자바(Java) 언어의 기본 구조

1.1 주석(Comment)

종류사용법단축키 (Eclipse 기준)설명
한 줄 주석// 주석내용Ctrl + /한 줄 전체를 주석 처리
여러 줄 주석/* 주석내용 */Ctrl + Shift + /Ctrl + Shift + \여러 줄을 블록으로 주석 처리
문서 생성 주석/** 주석내용 */Shift + Alt + JAPI 문서(클래스/메서드 설명)용 주석


1.2 자바의 메서드

  • 자바는 함수(Function) 대신 메서드(Method)를 사용합니다.
  • 메서드란?
    • 항상 클래스 내부에 존재합니다.
    • 예시: public static void main(String[] args) { ... }
    • public, static, void, main 등은 메서드의 접근제어자, 정적 선언, 반환형, 이름을 의미합니다.

1.3 세미콜론, 블록, 공백

세미콜론(;)

  • 논리적으로 한 문장이 끝날 때 반드시 붙입니다.
  • 한 줄에 여러 문장을 작성할 경우 각 문장 끝에 세미콜론을 붙입니다. javaint a = 10; int b = 20; int c = 30;

블록({ })

  • 중괄호 { }로 묶인 부분을 블록이라고 하며, 여러 문장을 하나로 묶을 때 사용합니다.
  • 클래스와 메서드는 반드시 블록으로 감쌉니다.

공백(Whitespace)

  • 빈칸, 탭, 빈 줄 등은 코드의 가독성을 높여줍니다.
  • 들여쓰기는 Ctrl + i로 자동 정렬할 수 있습니다.
    • 특정 블록: 블록 선택 후 Ctrl + i
    • 전체 파일: Ctrl + a로 전체 선택 후 Ctrl + i

1.4. 식별자(Identifier)

  • 대소문자를 구분하며, 길이 제한이 없습니다.
  • 문자, 숫자, 밑줄(_), 달러($)를 포함할 수 있습니다.
  • 시작 규칙
    • 문자, 밑줄(_), 달러($)로 시작 가능 (숫자로 시작 불가)
    • 첫 문자 이후에는 문자, 숫자, 밑줄(_), 달러($) 모두 사용 가능
    • 공백은 포함할 수 없음
  • 한글도 사용 가능하지만, 가급적 영문자를 사용하는 것이 좋습니다.
  • 밑줄(_), 달러($)는 특별한 경우를 제외하고 사용을 지양합니다.

1.5. 예약어(Keyword)

  • 자바에서 미리 정의된 단어로, 변수명이나 식별자로 사용할 수 없습니다.
  • 예시: class, public, static, void, if, else, for

2장 변수와 메서드

2.1 클래스이름/ 인터페이스 이름

  • 명사나 형용사를 서술적으로 연결하여 사용
  • Public의 경우 파일명과 클래스이름과 동일해야한다.
    - 만약 변경해야한다면 refactor rename을 쓴다

2.2 변수이름

  • 명사적 의미를 갖게 만듬
  • 첫글자는 소문자, 연결단어의 첫글자는 대문자로 표기함
  • ‘_’(언더바)를 사용하지 않는다

2.3 메서드 이름

  • 동사적 의미를 갖게 만듬
  • 첫글자는 소문자, 연결다너의 첫글자는 대문자로 표기함
  • ‘_’(언더바)를 사용하지 않는다
  • 뒤에 () 소괄호가 나온다

2.4 클래스 규칙

2.4.1 자바 파일에서 클래스 선언 관련 기본 규칙

  • 하나의 .java 파일에 여러 클래스 선언은 가능
  • 퍼블릭 클래스는 딱 하나만 존재 가능
  • 퍼블릭 클래스의 이름은 반드시 파일 이름과 같아야 함
// File: MyClass.java
public class MyClass {
    // main class
}

class Helper {
    // 보조 클래스
}

2.4.2 왜 퍼블릭 클래스는 하나만, 파일명과 같아야 하나?

  • 컴파일러가 클래스와 파일을 연결하기 쉽게 하기 위해 퍼블릭 클래스는 외부에서 접근 가능한 대표 클래스이므로, 파일명과 일치시키면 찾기 쉬움.
  • JVM은 클래스 로딩 시 파일명을 기준으로 클래스를 찾는데, 퍼블릭 클래스가 파일명과 다르면 혼란이나 충돌이 생길 수 있음.
  • 명확한 매핑을 통해 큰 프로젝트에서도 일관된 구조를 유지할 수 있음.

2.4.3 퍼블릭 클래스 외의 클래스는?

  • public이 아닌 클래스 (default, private, protected)는 같은 파일 안에 여러 개 선언 가능
  • 단, private 클래스는 최상위(Top-level)로 선언 불가능 → 자바는 Top-level 클래스는 public 또는 default (package-private)만 가능
// 잘못된 예시
private class HiddenClass { }  // 컴파일 오류 발생

// 올바른 예시
class DefaultClass { }  // 패키지 내에서 접근 가능

2.4.4 내부 클래스 (Inner class)에서는 private, protected 등 사용 가능

public class Outer {
    private class InnerPrivate { }
    protected class InnerProtected { }
    class InnerDefault { }
    public class InnerPublic { }
}

→ 위의 경우는 클래스 안에 정의된 "내부 클래스"이므로 접근 제한자 사용이 가능함.


3장 변수와 메서드

3.1 변수

  • 자바는 정적 타입 언어이기 때문에, 변수를 선언할 때 반드시 자료형(type)을 명시해야 합니다.
  • 변수를 사용하는 이유는 계산된(변하는) 값을 저장하고 재활용하기 위함입니다.
public class VariableExample {
    public static void main(String[] args) {
        int numberOne = 10;
        int numberTwo = 20;
        int result = numberOne + numberTwo; // 간단한 연산식도 가능
        System.out.println(result);
    }
}

3.2 자바 클래스 구조와 멤버 변수

  • 자바 클래스는 일반적으로 멤버 변수, 생성자, 메서드로 구성됩니다.
  • 클래스 안에 선언된 변수는 멤버 변수 (Member Variable)라고 하며, 클래스 전체에서 사용할 수 있습니다.
  • 반면, 메서드 내부에서 선언된 변수는 지역 변수 (Local Variable)라고 합니다.
public class HelloWorld {
    int count; // 멤버 변수

    public HelloWorld() {
        // 생성자
    }

    public void sayHello() {
        // 메서드
    }
}

3.3 지역 변수 (Local Variable)

  • 메서드나 블록 내에서 선언된 변수는 지역 변수입니다.
  • 지역 변수는 명시적으로 초기화하지 않으면 사용할 수 없습니다.
public class LocalVariableExample {
    public static void main(String[] args) {
        int a; // 지역 변수
        System.out.println(a); // 오류: 초기화되지 않음
    }
}
  • 위 예제에서는 변수 a를 초기화하지 않았기 때문에 컴파일 에러가 발생합니다.
  • 지역 변수는 반드시 초기화 후 사용해야 합니다.

3.4 멤버 변수 (Member Variable)

  • 클래스 내부, 메서드 외부에 선언된 변수는 멤버 변수입니다.
  • 자동 초기화: 사용자가 초기화하지 않아도 자바 시스템이 기본값으로 초기화합니다.
    • 예: int → 0, boolean → false, Object → null
  • 멤버 변수는 다음과 같이 두 가지로 구분됩니다:
구분설명사용 방법
인스턴스 변수static 키워드 없이 선언객체 생성 후 참조변수.변수명 으로 접근
클래스 변수 (정적 변수)static 키워드로 선언클래스 이름으로 직접 접근 가능

⚠ static 블록 주의

  • static 메서드나 블록에서는 비-static 멤버(인스턴스 변수)를 직접 사용할 수 없습니다.
  • 이유: static은 클래스 단위에 속하고, 인스턴스는 객체가 생성된 이후에 존재하기 때문입니다.
public class MemberVariableExample {
    int a; // 인스턴스 변수
    static int b; // 클래스 변수 (정적 변수)

    public static void main(String[] args) {
        // System.out.println(a); // Error: non-static 변수는 static 메서드에서 직접 참조 불가
        System.out.println(b); // OK: static 변수는 static 메서드에서 직접 접근 가능
    }
}

3.5 요약

항목설명
지역 변수 (Local Variable)메서드 내부에서 선언됨. 초기화 없이 사용 불가
멤버 변수 (Member Variable)클래스 내부에 선언됨. 자동 초기화됨
인스턴스 변수static 없이 선언된 멤버 변수. 객체 생성 후 사용
클래스 변수static으로 선언된 멤버 변수. 클래스명으로 직접 접근 가능
static 메서드인스턴스 변수 직접 접근 불가 (객체를 통해 접근해야 함)

3.6 메서드 (Method)

  • 자바에서는 모든 함수는 반드시 클래스 내부에 정의되어야 하므로, 일반적으로 ‘함수’보다는 ‘메서드’라고 부릅니다.
  • 메서드는 특정 작업을 수행하는 코드 블록으로, 반환형(return type)매개변수(parameter list)를 포함합니다.

📌 메서드 기본 문법

return_type methodName(parameter_list) {
    // 실행 코드
    return 반환값;
}

📌 예시

public class MethodExample {
    static int add(int num1, int num2) {
        return num1 + num2;
    }

    public static void main(String[] args) {
        int result = add(100, 200);
        System.out.println(result); // 300 출력
    }
}
  • add(int num1, int num2)는 정수 두 개를 받아 합산한 결과를 반환하는 메서드입니다.
  • return을 통해 결과를 돌려줍니다.
  • parameter_list는 메서드 호출 시 외부로부터 전달받는 값입니다.

3.7 자료형 (Data Types)

자바의 자료형은 기본 자료형(primitive type)과 참조 자료형(reference type)으로 구분됩니다.

✅ 기본 자료형 (Primitive Types)

분류자료형크기범위 또는 값
정수형byte1 byte-128 ~ 127
short2 byte-32,768 ~ 32,767
int4 byte-2,147,483,648 ~ 2,147,483,647
long8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형float4 byte±1.4e-45 ~ ±3.4e+38 (약 7자리 정밀도)
double8 byte±4.9e-324 ~ ±1.8e+308 (약 15자리 정밀도)
논리형boolean1 bytetrue, false
문자형char2 byte유니코드 문자 (\u0000 ~ \uFFFF)

✅ 참조 자료형 (Reference Types)

  • 객체나 배열을 참조할 때 사용되며, 기본형이 아닌 모든 타입이 참조형입니다.
  • 대표 예: String, Scanner, ArrayList, 사용자 정의 클래스 등
String name = "Java";
  • String은 문자들의 집합을 나타내는 참조형이며, 내부적으로는 char 배열을 사용합니다.

3.7.1 정수형 (Integral Types)

  • 자바에서 정수는 int, long 등으로 표현하며, 10진수뿐만 아니라 2진수, 8진수, 16진수로도 표현 가능합니다.
  • 숫자 리터럴 내에서 underscore(_)를 사용하여 가독성을 높일 수 있습니다.

    진수 표현법

진수접두어예시설명
10진수 (Decimal)없음int decimalValue = 7;일반적인 숫자
2진수 (Binary)0b 또는 0Bint binValue = 0b1000_0101;자바 7부터 지원
8진수 (Octal)0int octalValue = 077;앞에 0을 붙임
16진수 (Hexadecimal)0x 또는 0Xint hexaValue = 0xFEFE;앞에 0x를 붙임

📌 예제: IntValueExample.java

public class IntValueExample {
    public static void main(String[] args) {
        int decimalValue = 7;
        int binValue = 0b1000_0101;
        int octalValue = 077;
        int hexaValue = 0xFEFE;

        System.out.println("10진수 7은: " + decimalValue);
        System.out.println("2진수 10000101은: " + binValue);
        System.out.println("8진수 77은: " + octalValue);
        System.out.println("16진수 FEFE는: " + hexaValue);
    }
}

3.7.2 실수형 (Floating Point Types)

  • 실수형은 소수점이 있는 숫자를 표현합니다.
  • 자바에서는 floatdouble 두 가지 실수형이 있습니다.
  • 실수는 부동소수점(Floating Point) 방식으로 표현되며, 정수보다 부정확할 수 있으므로 주의가 필요합니다.

    실수형 리터럴 작성법

타입크기접미사예시
float4 byteF 또는 f (필수)float num1 = 1.1F;
double8 byteD 또는 d (선택)double num2 = 1.1; 또는 1.1D

📌 예제: FloatTypeExample.java

public class FloatTypeExample {
    public static void main(String[] args) {
        float num1 = 1.1F;     // float은 F 또는 f를 반드시 붙여야 함
        double num2 = 1.1;     // double은 기본 실수형이며, D는 선택

        System.out.println(num1); // 출력: 1.1
        System.out.println(num2); // 출력: 1.1
    }
}

3.8 논리형: boolean

  • boolean참(true) 또는 거짓(false) 두 값만 가질 수 있음.
  • 숫자 0, 1이나 문자열 "true", "false"를 직접 boolean에 대입할 수 없음.
boolean b1 = true;
boolean b2 = False;    // Error: 대소문자 구분
boolean b3 = "false";  // Error: 문자열은 boolean이 아님
boolean b4 = 0;        // Error: 숫자는 boolean이 아님

❗ Python과 다르게 숫자 0, 1 → boolean 처리 불가


3.9 문자형과 문자열

3.9.1 문자: char

  • 문자 하나를 저장하며, 작은 따옴표('') 사용
  • 내부적으로는 유니코드 정수형 (16비트)
char c1 = 'A';
char c2 = '\uAC00'; // 한글 '가'

3.9.2 문자열: String

  • 문자열은 기본 타입이 아닌 클래스
  • 큰 따옴표("") 사용
String s1 = "Hello";
String s2 = "\uD604\uC218"; // '현수'

🪄 특수문자 (Escape 문자)

System.out.println("줄\n바꿈"); // 줄
                                  // 바꿈

3.10 형변환 (Type Casting)

3.10.1 암시적 형변환 (자동)

  • 작은 타입 → 큰 타입 으로 자동 변환됨
  • 데이터 손실 없음
int i = 42;
double d = i; // OK: int → double

3.10.2 명시적 형변환 (강제)

  • 큰 타입 → 작은 타입 변환 시 명시적 캐스팅 필요
  • 데이터 손실 가능
double d = 42.5;
int i = (int) d; // 42 (소수점 절삭)

3.10.3 형변환 연산자

  • 형변환할 값 앞에 (자료형) 작성
byte a = 100;
int b = a;           // 자동 형변환
byte c = (byte) b;   // 강제 형변환

3.10.4 형변환 규칙

  • 실수 > 정수 > 문자 순으로 크기 비교
  • charint: 자동 변환 가능
  • charshort: 자동 변환 불가 (충돌 위험)
char ch = 'A';
int num = ch;        // OK

short s = 100;
// char c = s;      // Error

📌 정수 → 실수 형변환 예시 (정밀도 손실 주의)

int a = 1234567890;
float b = a;
System.out.println(b); // 1.23456794E9 (정밀도 손실)

3.10.5 산술 연산 시 자동 형변환

  • 작은 타입들끼리 연산하면 결과는 int
  • 컴파일러는 리터럴 연산은 예외로 처리하기도 함
byte a = 10, b = 20;
// byte c = a + b;       // Error: int로 변환됨
byte c = (byte)(a + b);  // OK

byte d = 10 + 20;        // OK: 컴파일 타임 계산
short e = 100 + 200;     // OK
System.out.println(5 / 2);   // 2 (정수 나눗셈)
System.out.println(5 / 2.0); // 2.5 (실수 나눗셈)

3.10.6 반올림, 올림, 내림

메서드설명
Math.round()반올림 (소수 첫째 자리 반올림)
Math.ceil()올림 (소수점 올림)
Math.floor()내림 (소수점 내림)
double a = -3.6, b = -3.4, c = 3.4, d = 3.6;
System.out.printf("%.0f %.0f %.0f %.0f\n",
  Math.ceil(a), Math.ceil(b), Math.ceil(c), Math.ceil(d)); // -3 -3 4 4

System.out.printf("%.0f %.0f %.0f %.0f\n",
  Math.floor(a), Math.floor(b), Math.floor(c), Math.floor(d)); // -4 -4 3 3

System.out.printf("%d %d %d %d\n",
  Math.round(a), Math.round(b), Math.round(c), Math.round(d)); // -4 -3 3 4

3.10.7 문자열 + 연산자

public class StringPlusExample {
	public static void main(String[] args){
		String s1 = "hello";
		String s2 = "World";
		System.out.println(s1 + s2);  //HelloWolrd
		int a1 = 3, a2=5;
		System.out.println(s1+ a1+ a2);   //Hello35
		System.out.println(ai+ a2+ s1);    // 8Hello
		System.out.println(s1+ (a1+a2));   //Hello8
	}
}
profile
인생 별거 없어

0개의 댓글