TIL-25.11.28

이준연·2025년 11월 28일

학습 키워드

  • 입출력
  • 연산자
  • 조건문
  • 반복문
  • 배열
  • 메서드

입출력

출력(OutPut)

  • 컴퓨터가 결과를 콘솔(화면)에 보여주는 것을 의미합니다.
System.out.println("안녕하세요!");
  • System은 출력은 도와주는 객체입니다.

입력(Input) - 사용자 입력 받기

  • 데이터를 전달하는 것을 의미합니다.
  • Java는 데이터를 읽을 때 객체(Scanner)를 사용합니다.

Sacnner 객체 소환

  • Scanner를 사용하기 위해서는 객체를 소환해야 하고, 변수 선언을 해야 합니다.
import java.util.Scanner; // Scanner를 사용하려면 import 필요

public class ScannerPractice {

    public static void main(String[] args) {
        // ✅ Scanner 객체 생성 & 변수에 담기
        Scanner scanner = new Scanner(System.in);        
    }
}

문자열 입력받기

  • 스캐너를 활용해서 문자열 데이터를 전달할 수 있습니다.
import java.util.Scanner;

public class ScannerPractice {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("좋아하는 문장을 입력하세요: ");
        String sentence = scanner.nextLine();  // ✅ 데이터 전달
        System.out.println("좋아하는 문장: " + sentence);
    }
}

숫자 입력받기

  • 스캐너를 활용해서 숫자 데이터를 전달할 수 있습니다.
import java.util.Scanner;

public class ScannerPractice {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("정수를 입력하세요: ");
        int num1 = scanner.nextInt();

        System.out.print("실수를 입력하세요: ");
        double num2 = scanner.nextDouble();

        System.out.print("큰 정수를 입력하세요: ");
        long num3 = scanner.nextLong();

        System.out.println("입력한 정수: " + num1);
        System.out.println("입력한 실수: " + num2);
        System.out.println("입력한 큰 정수: " + num3);
    }
}

연산자

기본적인 사칙 연산

  • 더하기, 뺴기, 곱하기, 나누기
int a = 10;
int b = 3;
        
// 기본 사칙연산
int sum = a + b;
System.out.println("sum = " + sum);
        
int sub = a - b;
System.out.println("sub = " + sub);
        
int mul = a * b;
System.out.println("mul = " + mul);

나눗셈에서 주의할 점

  • 정수끼리 나누게 되면 소수점이 버려집니다.
  • 소수점을 유지하려면 소수점과 연산을 시켜야 합니다.
int a = 10;
int b = 3;

int div = a / b;
System.out.println("div = " + div); // ⚠️ 3 (소수점 버려짐)
        
double div2 = a / 3.0;
System.out.println("div2 = " + div2); // ✅ 3.333... (소수점 유지)

모듈러 연산자(나머지 연산)

  • 모듈러(%) 연산자는 나머지를 구할 때 유용합니다.
  • 시간 연산 및 짝수/홀수 판별 등 여러 곳에서 활용됩니다.
int mod = 10 % 3;
System.out.println("mod = " + mod); // 나머지: 1

int mod2 = 15 % 4;
System.out.println("mod2 = " + mod2); // 나머지: 3

int mod3 = 20 % 7;
System.out.println("mod3 = " + mod3); // 나머지: 6

대입 연산자

  • 대입연산자(=)는 변수에 값을 할당하는데 사용됩니다.
  • 연산자 중에 제일 마지막에 수행됩니다.
int num = 5;
System.out.println("변수 num의 값: " + num); // 5

복합 대입 연산자

  • 복합 대입 연산자는 누적 값을 구할 때 자주 활용될 수 있습니다.
int num = 5;
num += 3;  // num = num + 3;
System.out.println("+= 결과: " + num); // 8

num -= 2;  // num = num - 2;
System.out.println("-= 결과: " + num); // 6

num *= 2;  // num = num * 2;
System.out.println("*= 결과: " + num); // 12

num /= 3;  // num = num / 3;
System.out.println("/= 결과: " + num); // 4

num %= 3;  // num = num % 3;
System.out.println("%= 결과: " + num); // 1

증강 연산자

  • 증강 연산자는 변수를 1 증가(++) 또는 1 감소(--) 시킬 때 사용되며 실무에서도 자주 활용 됩니다.
  • 전위 연산(++i)과 후위 연산(i++)의 차이가 있기 때문에 개념을 정확히 이해하는 것이 중요합니다.
  • 전위연산은 연산 후 사용 됩니다.
int a = 5;
System.out.println("++a: " + (++a));  // 6 (먼저 증가 후 출력)
System.out.println("현재 a 값: " + a);  // 6
  • 후위연산은 사용 후 연산 됩니다.
int b = 5;
System.out.println("b++: " + (b++));  // 5 (출력 후 증가)
System.out.println("현재 b 값: " + b);  // 6

비교 연산자

  • 같음 연산자(==): 두 값이 같으면 true, 다르면 false를 반환합니다.
System.out.println("10 == 10: " + (10 == 10)); // true
  • 다름 연산자(!=): 두 값이 다르면 true, 같으면 false를 반환합니다.
System.out.println("10 != 5: " + (10 != 5)); // true
  • 크기 비교 연산자(>,<,>=,<=) - 값을 비교해 논리에 맞으면 true를 반환합니다.
System.out.println("10 < 5: " + (10 < 5)); // false
System.out.println("10 >= 10: " + (10 >= 10)); // true
System.out.println("10 <= 5: " + (10 <= 5)); // false

논리 연산자

  • AND 연산자(&&): 두 조건이 모두 참일 때 true를 반환합니다.
System.out.println("true && true: " + (true && true));  // true
System.out.println("true && false: " + (true && false)); // false
System.out.println("false && false: " + (false && false)); // false

int age = 20;
boolean isStudent = true;
System.out.println(age > 18 && isStudent); // true
  • OR 연산자(||): 조건 중 하나라도 참이면 true를 반환합니다.
System.out.println("true || false: " + (true || false)); // true
System.out.println("false || false: " + (false || false)); // false
System.out.println("true || true: " + (true || true)); // true


int age = 20;
boolean isStudent = true;
System.out.println(age > 18 || isStudent); // true
  • NOT 연산자(!): true일 때 false로, false일 때 true로 변경합니다.
System.out.println("!true: " + (!true));  // false
System.out.println("!false: " + (!false)); // true


int age = 20;
boolean isStudent = true;
System.out.println(age > 18 && isStudent); // true

연산자 우선순위

  • 우선순위가 헷갈린다면 괄호를 적극적으로 사용하는 것이 좋습니다.
2 + 3 * 4; // 헷갈릴 수 있음
2 + (3 * 4) // 명확함
  • 산술 연산자 우선순위: 기본적인 수학 사칙연산 우선순위가 적용됩니다.
System.out.println(10 - 3 * 2); 
// 실행 순서: 10 - (3 * 2) 
// → 10 - 6 
// → 4
  • 기본 연산자 우선순위(산술 → 비교 → 논리 → 대입)
boolean flag = 10 + 5 > 12 && true;
System.out.println(flag);
// 실행 순서: (10 + 5) > 12 && true : 산술
// → 15 > 12 && true : 비교
// → true && true : 논리
// → flag = true 대입

문자열 비교

  • 실무에서 문자열을 비교할 때 ==를 사용하는 경우는 거의 없습니다.
  • 문자열 비교는 항상 .equlals()를 활용해야 합니다.
  • ==는 문자열 값을 비교하는 것이 아닌 메모리 주소를 비교하는 방식이기에 이러한 방식을 사용합니다.

조건문

컴퓨터는 스스로 어떤 조건이나 상태를 마주했을 때 사람처럼 스스로 판단할 수 없습니다.
컴퓨터가 마주할 조건들을 미리 정의해 놓아야 프로그램을 조건에 맞게 동작시킬 수 있습니다.

if문

  • 조건이 참일 때만 실행합니다.
public class Main {
    public static void main(String[] args) {
        String light = "초록불"; // (1)

				// (2) 만약 light 가 "초록불" 문자열과 같다면?
        if (light.equals("초록불")) {
            System.out.println("건너세요!"); // (3) 실행
        }
        // (4) 무조건 실행
    }
}

if-else문

  • 조건이 거짓일 때 실행합니다.
public class Main {
    public static void main(String[] args) {
        String light = "초록불"; // (1)

				// (2) 만약 light 가 "초록불" 문자열과 같다면?
        if (light.equals("초록불")) {
            System.out.println("건너세요!"); // (3) 실행(초록불일때)
        } else {
		        System.out.println("멈추세요!"); // (4) 실행(초록불이 아닐 때)
        }
        // (5) 다음 코드 실행(무조건 실행)
    }
}

else-if문

  • 여러 조건에 따라 실행해야할 때 사용합니다.
public class Main {
    public static void main(String[] args) {
        String light = "초록불";               // (1)

        if (light.equals("초록불")) {          // (2)
            System.out.println("건너세요!");    // (3)

        } else if (light.equals("노란불")) {   // (4)
            System.out.println("주의하세요!");   // (5)

        } else {  
            System.out.println("멈추세요!");    // (6)
        }

        // (7) 다음코드 진행
    }
}

switch문

  • 값에 따라 여러 동작을 실행합니다.

  • 단일값만 들어갈 수 있습니다.

  • 조건식은 사용할 수 없습니다.

    switch (단일값) {
      case 값1:
          // 값1일 때 실행할 코드
          break;
      case 값2:
          // 값2일 때 실행할 코드
          break;
      default:
          // 위의 값들과 일치하지 않을 때 실행할 코드
    }
    

반복문

일정한 형태의 작업을 반복적으로 수행해야 할 때 필요한 것이 반복문입니다.

for문

  • for 반복문에서는 반복작업을 시작하기 전에 종결 조건을 확인합니다.
  • 종결 조건이 참일 경우 반복을 수행하고 거짓이면 반복을 끝냅니다.

break문과 함께 사용

  • break문은 탈출 버튼이라고 생각하면 됩니다.
  • 반복을 벗어나야할 때 사용합니다.
public class Robot {

    public static void main(String[] args) {
    
		    int customers = 5;
		    
		    for (int i = 1; i <= customers; i++) {
				    if (i == 4) {
						    break; // (1) 반복을 벗어납니다.
				    }
				    System.out.println(i + "번째 손님, 안녕하세요!");
			  }
			  System.out.println("반복문이 종료되었습니다.");
    }
}

continue문

  • continue문은 건너뛰기 버튼입니다.
  • 특정 회차의 반복을 건너뛸 때 사용합니다.
public class Robot {

    public static void main(String[] args) {

		    int customers = 5;

		    for (int i = 1; i <= customers; i++) {
				    if (i == 2) {
						    continue; // (1) 반복을 건너 뜁니다.
				    }
				    System.out.println(i + "번째 손님, 안녕하세요!");
			  }
			  System.out.println("반복문이 종료되었습니다.");
    }
}

while문

  • while 반복문은 종결조건만 가지고 있습니다.
  • 종결조건식이 참일 때 반복합니다.
  • 무한 루프를 조심해야 합니다.
int i = 1;
while (i <= 10) { // 1은 10보다 작음으로 반복!
		System.out.println("i 가 10 보다 작습니다.");
		i++; // ✅ 없을 경우 무한루프 발생
}

do-while문

  • do-whilewhile문과 비슷하지만 종결조건을 반복 전이 아니라 후에 체크합니다.
int i = 1;
do {
		System.out.println("안녕하세요.");
		i++;
} while (i <= 10);

배열

비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현하는 방법으로, 관련된 데이터를 편리하게 관리하기 위해 사용됩니다.

String[] adventurerList = {"gygim", "Steve", "Grace", ...}; </br></br>

배열의 길이

  • 배열의 길이는 배열에 들어갈 수 있는 데이터의 개수를 의미합니다.
  • 배열을 만들 때 한 번 크기를 정하면 변경할 수 없습니다.(정적배열)
  • 아래의 문법으로 배열의 길이를 구할 수 있습니다.
// 배열이름.length
int arrLenght =  adventurerList.length;

배열 문법

  • new 키워드를 사용해 배열을 선언할 수 있습니다.
자료형[] 변수이름 = new 자료형[배열의길이]; // 배열선언

배열 선언의 방법

  • 배열의 이름과 길이 설정을 각 다른 줄에서 할 수 있습니다.
// 정수형 배열 arr 선언
int[] arr; // ✅ (1) 배열을 선언합니다.
arr = new int[5]; // ✅ (2) 배열의 길이를 5로 설정합니다. 

// 배열 길이 구하기
int arrLength = arr.length;
System.out.println("arrLength = " + arrLength); // arrLength = 5
  • 배열 선언과 배열길이 설정을 같은 줄에서 할 수 있습니다.
int[] arr = new int[5]; //// ✅ 선언과 동시에 길이를 설정합니다.
int arrLength = arr.length; 
System.out.println("arrLength = " + arrLength); // arrLength = 5

인덱스(index)

  • index의 시작은 0 입니다.
  • 인덱스를 통해 원하는 배열의 요소에 빠르게 접근할 수 있습니다.
System.out.println("배열의 1번째 요소 = " + arr[0]);
System.out.println("배열의 2번째 요소 = " + arr[1]);
System.out.println("배열의 3번째 요소 = " + arr[2]);
System.out.println("배열의 4번째 요소 = " + arr[3]);
System.out.println("배열의 5번째 요소 = " + arr[4]);
  • 인덱스를 통해 요소의 값을 삽입 수정할 수 있습니다.
int[] arr = new int[5];
arr[0] = 100; // ✅ 1번째 요소를 100로 설정
arr[1] = 200; // ✅ 2번째 요소를 200로 설정
arr[2] = 300; // ✅ 3번째 요소를 300로 설정
arr[3] = 400; // ✅ 4번째 요소를 400로 설정
arr[4] = 500; // ✅ 5번째 요소를 500로 설정
arr[5] = 600; // ❌ 접근 불가

향상된 for문

  • 배열의 모든 요소를 하나씩 꺼내서 활용할 때 편리한 반복문입니다.
  • index를 직접 활용하지 못합니다.
  • for(int a:arr) → 배열 arr에서 하나씩 꺼내서 a에 저장합니다.
int[] arr = {100, 200, 300, 400, 500};
for (int a : arr) {
		System.out.println("배열의 각 요소 = " + a);
}

2차원 배열

  • 2차원배열은 2차원적인 정보를 표현할 때 적합합니다.
  • 첫 번째 인덱스는 행 방향을 의미합니다.
  • 두 번째 인덱스는 열 방향을 의미합니다.
boolean[][] board = new boolean[2][2]; // ✅ 2 x 2 2차원 배열 선언


메서드

여러 개의 작은 명령문을 한 곳에 모아 사용하는 단위를 메서드라고 합니다.

메서드가 필요한 이유

  • 모든 일현의 작업들을 한 줄 한줄로 표현해 줘야 합니다.
  • 만약 기능을 수정한다면 해당 코드를 찾아 수정해야하는 문제가 발생합니다.

메서드 구조

  • 메서드는 항상 클래스 내부에 존재합니다.
    public class 클래스이름 {

    	[반환자료형] [메서드이름](매개변수..) {
    			작업 명령문들...
    	}

    }

메서드의 흐름

  • 메서드(함수, 기능)는 호출부, 선언부로 나누어집니다.
  • 호출부: 메서드를 사용하는 곳 입니다.
  • 선언부: 메서드가 정의되어 있는 곳 입니다.
  • 호출부 매개변수를 활용해 메서드 연산에 필요한 데이터를 전달할 수 있습니다.

지역변수의 개념

  • 각 메서드는 자신만의 영역을 가지고 있습니다.
  • 영역은 중괄호 {}로 표현합니다.
  • 중괄호 안에 선언된 변수는 중괄호 안에서만 생존할 수 있습니다.

선언부(Calculator.java)

메서드이름 설명

  • 기능의 역할을 쉽ㄱ 짐작할 수 있도록 의미있는 이름을 사용해야 합니다.
  • 카멜케이스(camelCase)를 사용하여 작성하며 주도 동사로 시작하는 것이 좋습니다.
  • 예: sum(), printMessage(), findUserByid()

매개변수 설명

  • 작업을 수행할 때 필요한 데이터를 전달받는 공간(변수)입니다.
  • 매개변수는 여러 개를 사용할 수 있으며 쉼표(,)로 구분합니다.

작업내용 설명

  • 메서드가 실행할 명령문을 {} 중괄호 안에 작성합니다.
  • 메서드가 호출되면 여기에 작성된 코드가 첫 번째 줄부터 실행됩니다.
  • 중괄호가 끝나면 함수가 종료됩니다.

반환값/반환자료형 설명

  • 반환값
    • 작업한 결과를 반환해야 할 경우 return 키워드를 사용합니다.
    • 반환값은 함수가 호출괸 곳으로 전달되고 이를 활용할 수 있습니다.
  • 반환자료형
    • 반환되는 데이터의 자료형을 메서드 선언부에 명시해야 합니다.
    • 반환값이 있는 경우 → 반환되는 데이터의 자료형(int, String, double)등을 작성합니다.
    • 반환값이 없는 경우 → void를 작성합니다.

호출부(Main.java)

  • 메서드를 활용하고 있는 곳을 의미합니다.
    public class Main {

    	public static void main(String[] args {
    			Calculator calculator = new Calculator(); // ✅ Calculator 객체 소환
    			int result = calculator.sum(1, 2); // ✅ 호출부
    			System.out.println("결과: " + result);
    	}

    }

profile
반갑습니다!

0개의 댓글