[Java] 기본문법&제어문

션션·2026년 1월 28일

Java

목록 보기
1/10
post-thumbnail

Hello Java

  • 프로그램 (Program)

    • 컴퓨터의 명령어들의 집합
    • 프로그래밍 (Programming) → 컴퓨터에게 명령을 내리는 과정
    • 저급언어(기계어, 어셈블리어) / 고급언어 (Java, Python)
    • 운영체제 (Operating System, OS) 역시 프로그램
  • 컴퓨터의 자료 표현

    • 비트 (Binary Digit, Bit) : 0 또는 1의 값만 가질 수 있음 → 2진수 사용
    • 바이트 (Byte) : 8개의 비트로 구성된 정보단위, 컴퓨터 메모리의 기본 단위
    • 10진수(SI 표준) 기반 단위 : B → KB → MB → GB → TB → PB → EB → ZB → YB
    • 2진수(IEC 표준) 기반 단위 : KiB → MiB → GiB → TiB → PiB → EiB → ZiB → YiB
  • Hello World!

    • STS 실행 → 워크스페이스 설정
    • 설치한 JDK 설정
    • 메뉴 → Window → Preferences → Java → Installed JREs 확인
    • Compiler 확인
    • Java 프로젝트 생성 (Module : Create module-info.java 체크 해제 )
    • Class 파일 생성 및 코드 작성
  • 주석(Comment)

    • // 내용 : 한 줄 주석, 해당 기호가 있는 위치부터 그 줄 끝까지 주석처리

    • /* 내용 */ : 여러 줄 주석, 해당 범위의 내용 주석 처리

    • /** 내용 */ : 문서화 주석, Documentation API를 위한 주석 처리

      주석 작성하는 것을 습관화하자!

  • 출력 메서드

    • System.out.print(데이터)
      • 전달된 데이터를 줄 바꿈 없이 출력
    • System.out.println(데이터)
      • 전달된 데이터를 출력한 뒤 줄바꿈(개행)을 추가
    • System.out.printf(형식 문자열, 데이터1, 데이터2, …)
      • 문자열을 형식화(formatting) 하여 출력
      • System.out.printf("%d기 %d반", 15,1); // printf : 변수를 넣어서 출력할 때
  • Java 파일이 실행될 때 매커니즘

    • Hello.java — javac Hello.java —> Hello.class — java Hello —> JVM 실행
    • 컴파일(Compile)
      • 사람이 읽고 쓰기 편한 고급 언어로 작성된 소스코드를 컴퓨터가 이해하고 실행할 수 있는 형태(기계어 또는 바이트코드 등)으로 변환하는 작업
    • 자바 컴파일러(javac)
      • .java 파일(고급언어)를 컴퓨터(JVM)이 이해할 수 있는 .class 파일 (저급언어, 바이트코드)로 변환해주는 컴파일러 프로그램
  • Write Once, Run Anywhere

    • 자바 언어의 슬로건
    • 플랫폼에 독립적이고, JVM만 설치되어 있다면 다양한 OS에서 동일한 코드 실행 가능
/**
 * 직접 만든 클래스입니다. 
 */

public class Java01_Hello {
	public static void main(String[] args) {
		System.out.println("Hello World!");
		
		System.out.println("hh");
		// 한 줄 주석 
		/*
		 *  여러 줄
		 *  주석입니다람쥐!
		 */
	}
}

변수와 자료형

  • 변수(Variable)

    • 컴퓨터 메모리의 데이터 저장소
    • 데이터에 이름을 부여하여 해당 데이터를 관리
    • 자료형에 따라 값 또는 참조 값을 저장
    • “=”을 통해서 CPU에게 연산작업을 의뢰
  • 변수 작명 규칙

    • 변수명은 대/소문자를 구분 (공백X)
    • 숫자로 시작할 수 없음
    • 특수문자 중 $, _ 만 사용가능
    • 자바 예약어(키워드)를 사용할 수 없음
      • public, private, import, for, if, … (IDE에서 색 변하는 것들…)
    • 의미를 담아서 지을 것(관례)
    • 합성어의 경우 주로 camelCase 표기법 사용
  • 자료형(데이터타입, Data Type)

    • 기본 자료형(Primitive Type)과 참조 자료형(Reference Type, 기본 자료형 8가지 외 모든 것)
    • 기본 자료형 : 변수 자체에 값(리터럴, literal)이 직접 저장됨
    • 참조 자료형 : 변수에 참조(레퍼런스, 주소)를 저장, 기본 값은 null(아무것도 참조하지 않음)
  • 변수의 선언

    • 데이터를 저장할 수 있는 공간을 확보하고 이름을 부여하는 작업
    • 자료형과 이름을 선언
      int a;
      int b;
      double c,d;
  • 변수의 초기화

    • 변수에 값을 저장하는 과정
    • 선언과 동시에 초기화 가능
      a = 10;
      b = 100;
      int f = 1000;
  • 변수의 종류

    • 지역 변수(Local Variable)
      • 메서드나 블록 내부에서 선언되며, 해당 범위 내에서만 유효
      • 초기화하지 않으면 사용할 수 없음
    • 멤버 변수(Instance Variable) (이후 학습 내용)
      • 클래스 내부에 선언
      • 객체가 생성될 때 메모리에 할당
      • 초기화하지 않으면 자료형의 기본 값으로 자동 초기화
    • 클래스 변수(Static Variable) (이후 학습 내용)
      • static 키워드를 사용하여 선언
      • 모든 객체가 공유하는 변수
      • 클래스 로드 시 메모리에 한번만 생성
  • 형 변환 (Type Casting)

    • 묵시적 형 변환(Implicit Casting)

      • 작은 데이터 타입을 큰 데이터 타입으로 변환

      • 데이터의 손실이 없음

      • 따라서 자동으로 변환

        int a = 10;
        double b = a; // int -> double (자동 변환)```
        
    • 명시적 형 변환 (Explicit Casting)

      • 큰 데이터 타입을 작은 데이터 타입으로 변환

      • 데이터 손실 가능성 있음

      • 따라서 직접 명시해줘서 변환함

        double x = 9.99;
        int y = (int) x; // double -> int (명시적 변환)```
        
      💡 작은 데이터 타입 / 큰 데이터 타입은 **메모리 할당 크기**가 아닌 **해당 자료형이 표현할 수 있는 수의 범위** ex. long → float (명시적) / float → long (묵시적)
    • 잼미니 보충 설명

      자바에서 형변환의 '크기' 기준은 메모리 용량(Byte)이 아니라 표현할 수 있는 수의 범위입니다.

      1. 메모리 크기 vs 수의 범위

      자료 내에도 언급되어 있듯이, 작은 타입에서 큰 타입으로 가는 것은 묵시적(자동) 형변환이 가능하지만, 반대는 명시적(강제) 형변환을 해야 합니다.

      자료형메모리 크기표현 범위 (대략적 비교)기준
      long8 Byte9×10189×1018-9 \times 10^{18} \sim 9 \times 10^{18}정수만 표현
      float4 Byte3.4×10383.4×1038-3.4 \times 10^{38} \sim 3.4 \times 10^{38}소수점 포함 (지수 방식)
      • *long(8바이트)float(4바이트)**보다 메모리는 2배나 많이 차지하지만, 정수만 담을 수 있습니다.

      • float은 부동 소수점 방식을 사용하여 메모리는 작아도 표현할 수 있는 숫자의 범위가 훨씬 넓습니다.

      • 따라서 자바는 float을 long보다 "큰" 타입으로 간주합니다.


        2. 왜 long → float은 묵시적(자동)일까?

      • long → float (묵시적): 80평짜리 집(long)에 있는 짐을 40평짜리 집(float)으로 옮기는데, 새 집의 천장이 훨씬 높아서 짐이 다 들어가는 상황과 비슷합니다. 데이터 손실 우려가 적다고 판단해 자동으로 해줍니다.

      • **float → long (명시적):** 반대로 아무리 80평이라도 천장이 낮은 집(long)에 천장이 높은 집(float)의 짐(소수점 데이터 등)을 넣으려고 하면, 윗부분이 잘려 나갈 수 있습니다(데이터 손실 가능성). 그래서 개발자가 직접 `(long)`이라고 명시해줘야 합니다.

        3. 자료 내 예시 수정 (주의!)

        질문하신 내용 중 자료의 예시 부분을 다시 보면 아래와 같은 규칙이 적용됩니다.

      • long → float: 작은 범위(정수)에서 큰 범위(실수)로 가는 것이므로 묵시적(자동) 형변환입니다.

      • **float → long:** 큰 범위(실수)에서 작은 범위(정수)로 가는 것이므로 소수점이 잘려 나가는 데이터 손실이 발생할 수 있어 **명시적(강제)** 형변환을 해야 합니다.

        요약하자면: 자바는 메모리 용량이 아니라 "누가 더 넓은 범위의 숫자를 담을 수 있는가"를 형변환의 기준으로 삼습니다. 그래서 정수 < 실수 순서로 타입이 크다고 보는 것이죠.

        이 개념이 확실히 잡히셨나요? 혹시 실습 코드에서 float f = 23234.234324324f; 처럼 f를 붙이는 이유와 연결해서 더 설명이 필요하신가요?

연산자

  • 연산자

    • 연산자(operator) : 계산이나 처리를 수행하는 기호
    • 피연산자(operand) : 해당 연산의 대상이 되는 값 (또는 변수)
    • 연산자가 여러 개 있을 때, 우선순위에 따라 계산 → 모르면 소괄호() 쓰기
  • 연산자 종류

    • 산술 연산자
    • 증감 연산자
    • 비교
    • 논리 …
  • 산술 연산자

    • 수학적 계산에 사용
    • 정수와 정수의 연산 → 정수
    • 정수와 실수의 연산 → 실수 (묵시적 형변환 발생)
    • +, -, *, /, %
  • 비교 연산자

    • 두 값을 비교하여 참 또는 거짓(boolean) 반환
    • 문자열 비교에서는 ‘==’ 연산보다는 equals() 활용
    • ‘=’ 연산은 같다는 의미가 아니라 대입연산자
  • 논리 연산자

    • 조건을 조합하여 참 또는 거짓(boolean)을 반환

    • 작성 순서에 따라 효율적인 연산 가능 (Short-Circuit Evaluation)

    • 종류
      - && (앰퍼센드)
      - ||
      - !

      💡 단락평가(Short-circuit Evaluation) 연산
    • 결과를 더 이상 확인할 필요가 없을 경우, 남은 조건을 연산하지 않고 넘어가는 방식

  • 대입(복합) 연산자

    • 변수에 값을 할당하는 연산자
    • 복합 대입연산자를 통해 산술 연산자와 대입 연산자를 축약해서 사용할 수 있음 (순서 생각)
  • 단항 연산자

    • 하나의 피연산자에만 작용하는 연산자
    • 변수의 값이 상태를 변경하거나 체크하는 데 사용
  • 기타 연산자

    • 삼항 연산자 조건식 ? 참 : (거짓)
    • new 연산자
    • [인덱스] 배열 접근 연산자
    • (객체 멤버 접근 연산자)
    • 비트 연산자
  • 연산자 우선순위

    • 괄호 → 산술 → 비교 → 논리 → 대입 순 (대략적으로)
    • 소괄호를 사용하여 표현하는 경우 가독성이 올라갈 수 있음

제어문

  • 제어문

    • 프로그램의 흐름을 제어하기 위한 문법 구조
    • 코드의 논리적 흐름관리와 반복 작업의 효율성을 위해서 필요
  • 제어문의 종류

    • 조건문(Conditional Statement) : 특정 조건에 따라 코드 실행 여부를 결정
    • 반복문(Loops) : 특정 조건이 참일 때 코드 블록을 반복 실행
    • 분기문(Branching Statements) : 반복문 또는 조건문 내에서 코드 흐름을 변경
  • if문

    • 조건식의 결과에 따라 코드 블록을 실행
    • 조건식 : true / false 값을 산출할 수 있는 연산식 또는 boolean 타입 변수가 올 수 있음
      if (조건식 ) { 
      	// 조건식이 참일 때 실행될 코드 블록 
      } 
    • 조건식이 참일 경우 코드 블록을 실행하고, 거짓일 경우 실행하지 않음
    • 실행할 문장이 하나라면 중괄호 생략 가능
  • if-else문

    • 조건식의 결과에 따라 실행할 블록 결정
      if (조건식) {
      	// 조건식이 참일 때 실행될 코드 블록 
      } else {
      	// 조건식이 거짓일 때 실행될 코드 블록 
      }
  • 중첩 if 문

    • 조건문 안에 조건문을 넣어 사용
      if (조건식A){ 
      	// 조건식 A가 참일 때 실행 
      	if(조건식B){
      		// 조건식 A,B 모두 참일 때 실행 
      	} else {
      		// 조건식 A는 참, B는 거짓일 때 실행 
      	}
      } else {
      	// 조건식 A가 거짓일 때 사용 
      }
    • 중첩 횟수 제한 없음
  • if - else if - else 문

    • 조건식의 결과에 따라 실행할 블록 결정
    • else if 블록 여러 개가 올 수 있음
    • 조건식이 참일 경우 해당 블록의 문장들을 실행하고, 거짓일 경우 다음 조건식을 확인
    • 조건식이 참인 경우 해당 블록의 문장을 실행하고 끝, 그 다음 조건식 검사하지 않음
  • if - else if / if - if

    • if 문에 else if를 함께 사용하는 것은 서로 연관된 경우 사용
    • 관련이 없는 독립 조건이라면 if문을 따로 사용
  • switch 문

    • 인자로 선택변수를 받아 변수의 값에 따라서 실행 블록이 결정

    • 값이 일치하는 case부터 시작해서 break를 만나면 종료

    • 일치하는 값이 없다면 default에서 시작

      switch(변수){
      	case1:
      		// 변수의 값이 값1과 일치할 때 실행될 코드 블록
      		break;
      	case2:
      		// 변수의 값이 값2과 일치할 때 실행될 코드 블록
      		break;
      	// ... 더 많은 case
      	default : 
      		// 변수의 값이 모든 case와 일치하지 않을 때 실행될 코드 블록 
      }
    • 변수 자리에 올 수 있는 값

      • byte, short, char, int
      • String (java 7 이상)
      • enum (java 5 이상)
      • Wrapper Class
  • switch expression 문 (java 14 ~ )

    • 표현식을 통해 값을 반환할 수 있음 (break 불필요)
    • 동일한 case 묶어서 처리
  • for문

    • 초기화는 반복문이 시작될 때 딱 한 번 실행
    • 조건식이 false면 반복문 종료
    • 증감식은 반복문의 반복이 끝나면 실행
    • 초기화식, 증감식은 (,)를 이용하여 둘 이상을 작성할 수 있음
    • 필요하지 않은 부분은 생략가능 / for(;;) 무한 루프
    • 반복횟수를 알고 있을 때 유용
    • 중첩으로 작성할 수 있음
  • while 문

    • 조건식이 true일 경우에 계속해서 반복 (조건식이 거짓이 될 때까지 문장을 반복 수행)
    • 조건식 생략 불가능
    • 반복 횟수를 명확히 알 수 없는 경우
  • do-while 문

    do {
    	// 반복할 코드 블록 
    } while (조건식);
    • 블록 내용을 먼저 수행 후 조건식 판단 (최소 한번은 수행)
    • 조건식이 true일 경우에 계속해서 반복 (조건식이 거짓이 될 때까지 문장을 반복 수행)
    • 조건식 생략 불가능
  • break 문

    • switch, while, do-while, for문의 블록에서 빠져나오기 위해서 사용
    • 가장 가까운 반복문을 빠져나감
    • 중첩된 반복문 구조에서 반복문에 이름(라벨)을 붙여 한번에 빠져나올 수 있음
  • continue 문

    • 현재 반복의 나머지 부분을 건너뛰고 다음 반복으로 감
    • 중첩된 반복문에서 이름(라벨)을 붙여 특정 반복을 건너 뛸 수 있음)

0개의 댓글