본문 바로가기

2025/04/24

반응형

오전 수업 요약

1. 문자열 참조 비교 (== vs .equals())

strArray[0] = "Java";
strArray[2] = new String("Java");
  • == : 주소(참조) 비교
  • .equals() : 문자열 내용 비교
  • 결과:
    • strArray[0] == strArray[1] → true
    • strArray[0] == strArray[2] → false
    • strArray[0].equals(strArray[2]) → true

2. 향상된 for문 (for-each)

int[] x = {95, 71, 84, 93, 87};
for (int y : x) sum += y;
  • 배열 전체 반복을 간단하게
  • 평균 계산 실습

3. main 메서드의 인자 사용 (args[])

String str1 = args[0];
int num1 = Integer.parseInt(str1);
  • 실행 시 인자 2개 필요
  • 두 정수의 합 계산 및 출력
  • 입력값 없을 경우 종료 처리

오후 수업 요약 (실습 중심)

1. mission6 - 2차원 배열 구조 확인

static void mission6() {
		int[][] array = { { 95, 86 }, { 83, 92, 96 }, { 78, 83, 93, 87, 88 } };

		System.out.println("배열의 줄 : " + array.length);
		for (int i = 0; i < array.length; i++)
			System.out.println((i + 1) + "번째 배열의 칸 : " + array[i].length);

	}
int[][] array = { {95, 86}, {83, 92, 96}, {78, 83, 93, 87, 88} };

 

  • .length로 줄(행) 수와 칸(열) 수 확인
  • 출력 예:
배열의 줄 : 3
1번째 배열의 칸 : 2

 

2. mission7 - 최대값 구하기

static void mission7() {
		int array[] = { 1, 5, 3, 8, 2 }, max = 0;

		for (int num : array)
			if (num > max)
				max = num;

		System.out.println("max num : " + max);
	}
int[] array = {1, 5, 3, 8, 2};
  • 향상된 for문 사용
  • 조건문으로 최대값 판별

3. mission8 - 2차원 배열 총합 및 평균

static void mission8() {
		int array[][] = { { 95, 86 }, { 83, 92, 96 }, { 78, 83, 93, 87, 88 } }, sum = 0, count = 0;

		for (int i = 0; i < array.length; i++) {
			count += array[i].length;
			for (int j = 0; j < array[i].length; j++)
				sum += array[i][j];
		}

		System.out.println("점수의 전체 합 : " + sum);
		System.out.println("점수 전체의 평균 : " + (double) sum / count);
	}
  • 합산 및 요소 수 카운트 → 평균 출력
sum += array[i][j];
count += array[i].length;

4. mission9 - 학생 점수 관리 프로그램

static void mission9() {
		Scanner sc = new Scanner(System.in);
		String str;
		int count = 0, scores[] = null, sum = 0;

		while (true) {
			System.out.println("-".repeat(40));
			System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료");
			System.out.println("-".repeat(40));
			System.out.print("선택> ");
			str = sc.nextLine();

			if (str.equals("1")) {
				System.out.print("학생수> ");
				str = sc.nextLine();
				count = Integer.parseInt(str);
				scores = new int[count];
			} else if (str.equals("2")) {
				if (scores == null) {
					System.out.println("현재 정해진 학생 수가 없습니다.");
					continue;
				}

				for (int i = 0; i < scores.length; i++) {
					System.out.print("scores[" + i + "]>");
					str = sc.nextLine();
					count = Integer.parseInt(str);
					scores[i] = count;
				}
			} else if (str.equals("3")) {
				for (int i = 0; i < scores.length; i++)
					System.out.println("scores[" + i + "] : " + scores[i]);
			} else if (str.equals("4")) {
				for (int i : scores) {
					if (i > count)
						count = i;
					sum += i;
				}

				System.out.println("최고 점수 : " + count);
				System.out.println("평균 점수 : " + (double) sum / scores.length);
			} else if (str.equals("5"))
				break;
		}

		System.out.println("프로그램 종료");
	}
  • 메뉴 기능 구성:
    1. 학생 수 설정
    2. 점수 입력
    3. 점수 출력
    4. 최고 점수 및 평균 분석
    5. 종료
  • 입력/출력 및 예외 처리 포함

🧠 9일차 핵심 요약표

주제 내용
문자열 비교 == (참조), .equals() (내용)
향상된 for문 배열 반복 간단화
main 인자 외부 입력값 처리 및 타입 변환
2차원 배열 구조 확인, 평균 계산
실습 문제 최대값, 총합, 점수 분석 프로그램 구현

 

댓글
반응형

이번 글에서는 자바 애플리케이션 실행 시 외부에서 값을 입력받는 방식인
main 메서드의 매개변수 String[] args를 사용해 명령행 인자를 처리하는 방법을 학습합니다.
실행 시 입력값을 활용하여 유연한 프로그램을 만드는 기초가 됩니다.


📌 예제 코드

public class MainStringArrayArgument {
	public static void main(String[] args) {
		if (args.length != 2) {
			System.out.println("프로그램 입력값 부족");
			System.exit(0);
		}

		String str1 = args[0], str2 = args[1];

		int num1 = Integer.parseInt(str1), num2 = Integer.parseInt(str2);
		int sum = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + sum);
	}
}

💬 코드 설명

  • String[] args
    → 프로그램 실행 시 외부에서 전달되는 문자열 배열
    → 입력값이 없으면 args.length == 0
  • args.length != 2
    → 인자가 2개가 아닐 경우 오류 메시지 출력 후 프로그램 종료
  • args[0], args[1]
    → 입력값 2개를 문자열로 받아서 각각 저장
  • Integer.parseInt()
    → 문자열을 정수로 변환
  • System.exit(0)
    → 프로그램 즉시 종료

💻 실행 예시 (명령행 입력)

> java MainStringArrayArgument 10 20
10 + 20 = 30

→ 인자가 2개이므로 정상 실행됨

> java MainStringArrayArgument 10
프로그램 입력값 부족

→ 인자가 1개이므로 종료됨


📌 간단 정리

요소 설명
main(String[] args) 자바 프로그램의 진입점, 외부 입력을 배열로 받음
args.length 입력된 인자의 개수
args[i] 인자 접근 (i번째)
Integer.parseInt() 문자열을 정수로 변환

💡 포인트 정리

  • main(String[] args)는 외부에서 실행 시 데이터를 입력받을 수 있도록 설계된 구조
  • args.length를 활용해 입력값 유무를 검증해야 함
  • 숫자 입력은 반드시 parseInt() 등으로 형변환 필요
  • System.exit(0)은 정상 종료, System.exit(1)은 오류 종료로 사용 가능
댓글
반응형

이번 글에서는 문자열을 배열로 선언한 후,
==(참조 비교).equals()(내용 비교) 의 차이를 직접 확인합니다.
특히 new String() 으로 생성된 문자열과 리터럴로 초기화된 문자열은 메모리 구조에서 차이가 나므로
비교 연산자 사용 시 주의가 필요합니다.


📌 예제 코드

public class ArrayReferenceObjectExample {
	public static void main(String[] args) {
		String[] strArray = new String[3];
		strArray[0] = "Java";
		strArray[1] = "Java";
		strArray[2] = new String("Java");

		System.out.println(strArray[0] == strArray[1]);
		System.out.println(strArray[0] == strArray[2]);
		System.out.println(strArray[0].equals(strArray[2]));
	}
}

💬 코드 설명

  • strArray[0] = "Java";
    → 문자열 리터럴 "Java"를 저장 (상수 풀에 등록됨)
  • strArray[1] = "Java";
    → 동일한 리터럴이므로 strArray[0]과 같은 객체를 참조
  • strArray[2] = new String("Java");
    → "Java"와 같은 내용을 가지지만, 새로운 객체를 생성함
  • ==
    참조가 같은지 비교 (메모리 주소 비교)
  • .equals()
    문자열의 실제 내용이 같은지 비교

💻 실행 결과

true
false
true

📌 간단 정리

표현식 의미 결과
strArray[0] == strArray[1] 같은 리터럴 → 같은 참조 TRUE
strArray[0] == strArray[2] new 생성 객체 → 다른 참조 FALSE
strArray[0].equals(strArray[2]) 내용은 같음 TRUE

💡 포인트 정리

  • "문자열" 리터럴은 상수 풀에 저장, 동일 리터럴은 같은 참조를 공유
  • new String("문자열")은 항상 새로운 객체를 생성
  • ==는 참조 비교 (주소 비교)
    → 객체가 같은 메모리를 참조하는가
  • .equals()는 내용 비교
    문자열 값 자체가 같은가
댓글