본문 바로가기

Java

반응형

이번 강의에서는 자바에서 문자열을 비교할 때 사용하는 == 연산자와 .equals() 메서드의 차이를 예제를 통해 명확히 이해해봅니다.
자바에서 문자열은 객체이기 때문에, 단순히 ==으로 비교하면 "값"이 아니라 "주소(참조)"를 비교하게 됩니다.
문자열 내용이 같은지를 비교하고 싶다면 반드시 .equals()를 사용해야 합니다.


📌 예제 코드

public class EqualsExample {
	public static void main(String[] args) {
		String str1 = "홍길동", str2 = "홍길동";
		System.out.println("str1과 str2는 참조가 " + (str1 == str2 ? "같다." : "다르다."));
		if(str1.equals(str2))
			System.out.println("str1과 str2는 문자열이 같다.");
		
		String str3 = new String("홍길동"), str4 = new String("홍길동");
		System.out.println("str3과 str4는 참조가 " + (str3 == str4 ? "같다." : "다르다."));
		if(str3.equals(str4))
			System.out.println("str3과 str4는 문자열이 같다.");
	}
}

💬 코드 설명

  • String str1 = "홍길동", str2 = "홍길동";
    → 문자열 리터럴은 String 상수 풀에 저장되므로 같은 객체를 참조
  • str1 == str2
    → 참조(주소)가 같으므로 true
  • str1.equals(str2)
    → 문자열 내용 비교 → true
  • String str3 = new String("홍길동"), str4 = new String("홍길동");
    → new를 사용하면 항상 새로운 객체 생성
    → 참조는 다르지만 문자열 내용은 같음
  • str3 == str4
    → 서로 다른 객체 → false
  • str3.equals(str4)
    → 문자열 내용은 같으므로 true

💻 실행 결과

str1과 str2는 참조가 같다.
str1과 str2는 문자열이 같다.
str3과 str4는 참조가 다르다.
str3과 str4는 문자열이 같다.

📌 간단 정리

비교 방식 비교 대상 결과 설명
== str1 vs str2 TRUE 상수 풀의 같은 참조
.equals() str1 vs str2 TRUE 내용 같음
== str3 vs str4 FALSE 서로 다른 객체
.equals() str3 vs str4 TRUE 내용 같음

💡 포인트 정리

  • ==는 주소(참조) 비교 → 객체가 같은지 여부
  • .equals()는 문자열의 내용(값) 비교
  • 문자열 비교 시에는 반드시 .equals() 사용!
  • new String("...")은 항상 새 객체를 생성하므로 주의
댓글
반응형

이번 글에서는 자바에서 객체가 가비지 컬렉션(Garbage Collection)의 대상이 되는 시점과,
참조 변수의 역할에 대해 간단한 예제를 통해 알아봅니다.

자바는 C언어처럼 개발자가 직접 메모리를 해제하지 않고,
JVM이 자동으로 사용하지 않는 객체를 정리해줘요.
이때, 더 이상 참조되지 않는 객체는 가비지 컬렉터에 의해 제거됩니다.


📌 예제 코드

public class GarbageObjectExample {
	public static void main(String[] args) {
		String hobby = "여행";
		hobby = null;

		String kind1 = "자동차", kind2 = kind1;
		kind1 = null;

		System.out.println("kind2 : " + kind2);
	}
}

💬 코드 설명

  • String hobby = "여행";
    "여행"이라는 문자열 객체가 메모리에 생성되고, hobby가 이를 참조합니다.
  • hobby = null;
    이제 hobby는 "여행" 객체를 참조하지 않게 되므로,
    "여행"은 가비지 컬렉션의 대상이 됩니다.
  • String kind1 = "자동차", kind2 = kind1;
    "자동차"라는 문자열을 kind1과 kind2가 동시에 참조하고 있습니다.
  • kind1 = null;
    이제 kind1은 참조를 잃지만, kind2가 여전히 참조하고 있기 때문에
    "자동차"는 가비지 컬렉션 대상이 아닙니다.
  • System.out.println("kind2 : " + kind2);
    kind2가 "자동차"를 참조하고 있으므로 출력됨

💻 실행 결과

kind2 : 자동차

📌 간단 정리

변수 참조 여부 설명
hobby null로 설정됨 → "여행"은 가비지 컬렉션 대상
kind1 null로 설정됨
kind2 "자동차"를 참조 중 → 가비지 컬렉션 대상 아님

💡 포인트 정리

  • 참조가 모두 사라진 객체는 가비지 컬렉션 대상이 됨
  • null을 대입하면 해당 참조는 끊기지만, 다른 참조가 남아 있으면 객체는 유지됨
  • 자바에서는 메모리 관리를 직접하지 않고, JVM이 자동으로 정리함
댓글
반응형

이번 글에서는 반복문이나 switch문에서 사용하는 break문에 대해 자세히 알아봅니다.
break는 현재 실행 중인 블록(반복문 또는 switch문)을 즉시 종료하고 빠져나가는 데 사용됩니다.


📌 예제 코드

public class BreakExample {
	public static void main(String[] args) {
		while (true) {
			int num = (int)(Math.random() * 6) + 1;
			System.out.println(num);
			if (num == 6)
				break;
		}
		System.out.println("프로그램 종료");
	}
}

💬 코드 설명

  • while (true)
    무한 반복문을 생성합니다. 종료 조건이 없으므로 break 없이는 계속 반복됩니다.
  • int num = (int)(Math.random() * 6) + 1;
    1부터 6까지의 난수를 생성합니다.
  • if (num == 6) break;
    주사위가 6이 나오면 break를 통해 반복문을 빠져나갑니다.
  • System.out.println("프로그램 종료");
    반복문이 종료된 후 출력됩니다.

💻 실행 결과 (예시)

3
2
5
6
프로그램 종료

※ 매번 실행 시 결과는 랜덤하게 달라짐


📌 간단 정리

키워드 설명
break 반복문 또는 switch문을 즉시 종료
사용 위치 for, while, do-while, switch
작동 방식 가장 가까운 반복문 하나만 종료

💡 포인트 정리

  • break는 지정된 반복 블록을 즉시 종료하는 제어문입니다.
  • 무한 루프에 종료 조건을 달기 위해 자주 사용됩니다.
  • 중첩 반복문에서는 가장 안쪽 반복문만 종료하므로 주의해야 합니다.
  • 여러 반복문을 한번에 종료하려면 label과 함께 사용하는 방법도 있어요. (심화 내용)
댓글
반응형

이번 글에서는 배열을 비교할 때 == 연산자가 어떻게 동작하는지를 예제를 통해 확인해봅니다.
자바에서 배열은 객체이기 때문에, ==을 사용하면 값이 아닌 '주소(참조값)'를 비교하게 됩니다.


📌 예제 코드

public class CompareExample {
	public static void main(String[] args) {
		int[] arr1, arr2, arr3;
		arr1 = new int[] { 1, 2, 3 };
		arr2 = new int[] { 1, 2, 3 };
		arr3 = arr2;

		System.out.println(arr1 == arr2);
		System.out.println(arr2 == arr3);
	}
}

💬 코드 설명

  • arr1 = new int[] { 1, 2, 3 };
    새로운 배열 객체를 생성해서 arr1에 저장
  • arr2 = new int[] { 1, 2, 3 };
    또 다른 배열 객체를 생성해서 arr2에 저장
  • arr3 = arr2;
    arr3는 arr2와 같은 배열 주소를 참조하게 됨
  • System.out.println(arr1 == arr2);
    서로 다른 배열 객체 → 주소가 다르므로 false 출력
  • System.out.println(arr2 == arr3);
    같은 배열을 참조하고 있으므로 true 출력

💻 실행 결과

false
true

💡 포인트 정리

  • == 연산자는 기본형에서는 값 비교, 참조형에서는 주소 비교
  • 배열은 객체이기 때문에 ==으로 비교하면 값이 같아도 false가 나올 수 있음
  • 배열의 내용이 같은지 비교하려면 Arrays.equals() 같은 메서드를 사용해야 함
댓글
반응형

이번 글에서는 반복문에서 continue문을 사용하여 특정 조건일 때 반복을 건너뛰는 방법을 알아봅니다.
continue는 반복문 안에서 사용되며, 해당 반복을 건너뛰고 다음 반복으로 이동하게 해줍니다.


📌 예제 코드

public class ContinueExample {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			if (i % 2 != 0)
				continue;
			System.out.print(i + " ");
		}
	}
}

💬 코드 설명

  • for (int i = 1; i <= 10; i++)
    1부터 10까지 1씩 증가하면서 반복합니다.
  • if (i % 2 != 0)
    i가 홀수인 경우를 검사합니다. (%는 나머지 연산자)
  • continue;
    조건을 만족하면 현재 반복을 건너뛰고, 다음 반복으로 넘어갑니다.
  • System.out.print(i + " ");
    짝수인 경우만 이 줄이 실행되어 출력됩니다.

 

💻 실행 결과

2 4 6 8 10

📌 간단 정리

요소 설명
continue 현재 반복을 건너뛰고, 다음 반복으로 이동
i % 2 != 0 홀수인지를 판별하는 조건식
출력 결과 1~10 사이 짝수만 출력됨

💡 포인트 정리

  • continue는 반복문 안에서 조건에 따라 일부 실행을 생략할 때 사용합니다.
  • 이 예제에서는 i % 2 != 0일 때 출력 코드를 건너뛰어 짝수만 출력됩니다.
  • break는 반복문을 아예 종료하지만, continue는 다음 반복으로 이동하는 점이 다릅니다.
댓글
반응형

🕘 오전 수업 요약

✅ 1. for문 기본 사용

  • 1부터 10까지 출력:
for (int i = 1; i <= 10; i++) {
    System.out.print(i + "\t");
}

✅ 2. 1~100까지의 합 계산

  • 누적 합계:
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}

✅ 3. 구구단 출력 (_99dan)

  • 중첩 for문 활용 (1~9단 출력)
  • System.out.printf()로 정렬
  • 3단마다 줄바꿈하여 보기 좋게 구성

✅ 4. while문 실습

  • i++을 이용한 1~10 출력
  • 1~100까지의 합계 계산

🕐 오후 수업 요약

✅ 1. do-while문

  • 조건보다 먼저 실행되는 반복문
  • "q" 입력 전까지 문자열 입력 반복

✅ 2. break 예제

  • 주사위를 던져 6이 나오면 반복 종료

✅ 3. continue 예제

  • 1~10 중 짝수만 출력 (홀수는 continue로 생략)

✅ 4. 실습 문제 (mission_34567)

3번 1~100 중 3의 배수의 합 출력
	static void mission3() {
		int sum = 0;

		for (int i = 1; i <= 100; i++)
			if (i % 3 == 0)
				sum += i;

		System.out.println("1~100 중 3의 배수의 합 : " + sum);
	}
4번 주사위 두 개의 합이 5가 될 때까지 반복 출력
	static void mission4() {
		int x, y;
		while (true) {
			x = (int) (Math.random() * 6) + 1;
			y = (int) (Math.random() * 6) + 1;
			if ((x + y) == 5)
				break;
			System.out.println("(" + x + ", " + y + ")");
		}
	}
5번 4x + 5y = 60을 만족하는 (x, y) 쌍 출력
	static void mission5() {
		for (int x = 0; x <= 10; x++) {
			for (int y = 0; y <= 10; y++) {
				if ((x * 4 + y * 5) == 60)
					System.out.println("(" + x + ", " + y + ")");
			}
		}
	}
6번 다음과 같은 별 출력 피라미드 구현
*
**
***
****
*****
	static void mission6() {
		for (int x = 1; x <= 5; x++) {
			for (int y = 1; y <= x; y++)
				System.out.print("*");
			System.out.println();
		}
	}
7번 간단한 ATM 프로그램
  • 메뉴: 예금 / 출금 / 잔고 확인 / 종료
  • 사용자 입력에 따라 동작 수행
	static void mission7() {
		Scanner sc = new Scanner(System.in);

		int money = 0;
		int select;

		while (true) {
			System.out.println("-------------------------------------");
			System.out.println("1. 예금 | 2. 출금 | 3. 잔고 | 4. 종료");
			System.out.println("-------------------------------------");

			System.out.print("선택> ");
			select = sc.nextInt();

			if (select == 1) {
				System.out.print("예금액> ");
				select = sc.nextInt();
				money += select;
			} else if (select == 2) {
				System.out.print("출금액> ");
				select = sc.nextInt();
				money -= select;
			} else if (select == 3) {
				System.out.println("잔고> " + money);
			} else
				break;

			System.out.println();
		}

		System.out.println("프로그램 종료");
	}

🧠 5일차 핵심 요약표

주제 내용
반복문 for, while, do-while
제어문 break, continue
누적 합 sum += 값 형태 사용
실습 중심 반복 + 조건문을 종합적으로 활용한 문제 풀이
사용자 입력 Scanner를 통한 값 입력 처리
댓글
반응형

do-while문은 조건과 상관없이 무조건 한 번은 실행된다는 특징이 있어요.
이번 예제는 사용자의 입력을 반복적으로 받아서 출력하다가, q를 입력하면 종료되는 간단한 콘솔 프로그램입니다.


📌 예제 코드

import java.util.Scanner;

public class DoWhileExample {
	public static void main(String[] args) {
		System.out.println("메세지를 입력해주세요.");
		System.out.println("프로그램을 종료하려면 'q'를 입력하세요.");

		Scanner sc = new Scanner(System.in);
		String str;

		do {
			System.out.print(">");
			str = sc.nextLine();
			System.out.println(str);
		} while (!str.equals("q"));

		System.out.println("\n프로그램 종료");
	}
}

💬 코드 설명

  • import java.util.Scanner;
    사용자 입력을 받기 위해 Scanner 클래스를 불러옵니다.
  • Scanner sc = new Scanner(System.in);
    입력을 받기 위한 Scanner 객체를 생성합니다.
  • do { ... } while (!str.equals("q"));
    문자열이 "q"가 아닐 때까지 반복합니다. 단, do 블록은 조건과 상관없이 1번은 실행됩니다.
  • str = sc.nextLine();
    사용자가 입력한 문자열을 변수 str에 저장합니다.
  • System.out.println(str);
    입력한 내용을 그대로 출력합니다.
  • System.out.println("프로그램 종료");
    "q"를 입력하면 반복을 종료하고 마지막 메시지를 출력합니다.

 


💻 실행 결과 (예시)

메세지를 입력해주세요.
프로그램을 종료하려면 'q'를 입력하세요.
>안녕하세요
안녕하세요
>테스트입니다
테스트입니다
>q
q

프로그램 종료

📌 간단 정리

변수명 설명
str 사용자로부터 입력받은 문자열
sc Scanner 객체, 입력을 받기 위한 도구

💡 포인트 정리

  • do-while문은 조건과 무관하게 최소 한 번은 실행됩니다.
  • .equals("q")를 사용하여 문자열 비교를 정확하게 수행해야 합니다.
  • 사용자 입력 기반 반복 처리에 적합한 구조입니다.
댓글
반응형

이번 글에서는 while 반복문을 사용하여 1부터 100까지의 정수의 합을 계산하는 예제를 다룹니다.

while 문은 조건이 true인 동안 반복 수행되는 구조로, 조건식을 먼저 검사한 후 실행합니다.


💻 예제 코드

public class While1To100SumExample {
	public static void main(String[] args) {
		int sum = 0, i = 0;

		while (i++ < 100)
			sum += i;

		System.out.println("1~" + (i - 1) + " 합 : " + sum);
	}
}

💬 코드 설명

 

  • int sum = 0, i = 0;
    sum은 누적합을 저장하는 변수이고, i는 반복에 사용될 변수입니다.
  • while (i++ < 100)
    조건을 확인한 후, 반복을 진행합니다. i++는 후위 증가 연산이므로 현재 i값을 먼저 비교하고, 이후에 증가시킵니다.
  • sum += i;
    증가된 i 값을 sum에 누적합니다.
  • System.out.println(...)
    결과를 출력합니다. 출력 시 i - 1로 표시하여 마지막 더해진 숫자를 출력합니다.

📃 실행 결과

1~100 합 : 5050

 


📌 간단 정리

변수 설명
sum 숫자들의 누적 합
i 1부터 100까지 증가하는 반복 변수

💡 포인트 정리

  • while문은 조건이 참이면 계속 반복됩니다.
  • i++ < 100은 조건 비교 후 i가 1씩 증가합니다.
  • 1부터 100까지의 합은 5050입니다.
댓글