JAVA 웹개발 과정 국비 5일차 정리

5일차

※ 배우는 과정이므로 정확하지 않을 수 있습니다.
잘못된 점은 알려주시면 수정하도록 하겠습니다!


1. (제어문 중) for문

초기, 조건, 증감문을 한번에 선언 가능.
가장 보편적인 반복문으로 가독성이 높다.

2. 반복문의 흐름제어

1) break문

  • 자기가 속한 반복문을 깨버린다.
  • 닫히는 괄호 다음 라인으로 반복문을 탈출한다.
  • 반복문 안에서만 쓰인다.

2) continue문

  • 닫히는 괄호 바로 전 라인으로 간다.
  • 반복문은 계속 실행하되, 특정코드는 실행하고 싶지 않다면 사용

3) 무한루프

  • 반복 횟수가 미리 정해져있지 않고 무한히 반복되는 루프.
  • 무한루프는 에러가 아니다!
  • for(;;){실행문;}
  • while(true){실행문;} -> 많이 사용된다.

3. (제어문 중) 선택문

  • 하나의 변수 값에 따라 개별적인 처리가 가능한 다중 선택문.
  • 전체적인 메뉴 구성 시 보편적으로 사용.
  • Boolean값을 사용할 수 없다.

4. 문자열 비교

public class Exam_04 {
	public static void main(String[] args) {
		
		String a = "Hello";
		String b = "Hello";
		
		System.out.println(a == b); // true
	}
}

위의 코드가 true가 나온 이유를 ‘값이 같아서’라고 한다면 반만 맞는다.
정확히 말하자면 값이 같아서 true가 나온 것이 아니기 때문이다.
참조형 변수 String은 Heap 메모리에 값을 저장하게 되고 변수 a와 b는 그 주소가 담겨있다.
데이터가 저장된 공간의 주소값이 같기 때문에 true가 나온 것이라고 해야 정확한 답이 된다.

1) 주소는 왜 같은 것일까?

RAM은 한정된 공간을 갖는다.
따라서 데이터를 저장할 때 효율적인 방법을 사용하게 된다.
만약 Hello라는 값을 1000의 주소값에 저장한다고 하면 b의 변수의 값인 Hello를 다시 저장하려고 할 때 혹시 메모리에 Hello가 저장된 게 있나? 하고 검색을 해보게 된다. 그때 같은 값을 가진 것을 찾는다면 그 주소값을 다시 가져온다.

2) 다른 Hello로 저장하고 싶은데요?

public class Exam_04 {
	public static void main(String[] args) {
		
		String a = "Hello";
		String b = new String("Hello");
		
		System.out.println(a == b); // false
	}
}

위의 코드처럼 new String을 써주면 다른 Hello를 만들 수 있다.
다른 Hello의 값을 만들었기 때문에 주소값도 당연히 다른 값을 가지게 되고, 위의 true와는 달리 값을 비교하게되면 false가 나온다.

3) 그래서 이걸 왜 알아야하는데?

public class Exam_04 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("메세지를 입력하세요.");
		String msg = sc.nextLine(); // new String("Hello");로 동작
		
		if(msg == "Hello") {
			System.out.println("입력된 문자열은 Hello 입니다.");
		}
	}
}

위의 메세지 출력 프로그램이 있다고 해보자.
단순하게 생각한다면 Hello를 입력했을 때 ‘입력된 문자열은 Hello 입니다.’가 출력되어야 하지만 실행해보면 이 문장은 출력되지 않는다.
변수 msg에 저장된 Hello의 주소값과 if문에 있는 Hello의 주소값이 다르기 때문이다.
이런 문제를 방지하려면 ==로 문자열을 비교하면 안된다.

4) 그럼 문자열 비교는 어떻게 해야하는데?

비교할값1.equals(“비교할값2”)

equals함수는 주소값과 상관 없이 값만을 비교해주기 때문에 위와 같은 상황을 방지할 수 있다.
위의 메세지 출력 프로그램을 제대로 동작하도록 바꾸면 아래와 같다.

public class Exam_04 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("메세지를 입력하세요.");
		String msg = sc.nextLine(); // new String("Hello");로 동작
		
		if(msg.equals("Hello")) {
			System.out.println("입력된 문자열은 Hello 입니다.");
		}
	}
}

5. 그 외

  • System.exit(0); : 시스템 자체를 강제 종료 시킨다.

아는 개념들은 굳이 깊게 정리하지 않으려고 한다.
예쁘게 정리하려고 시간을 쏟다가 다른 공부할 시간을 뺏을 것 같아서이다.
제어문의 개념들은 책에도 잘 나와있으니 만약 다시 보고싶다면 책을 참고해야겠다.

댓글남기기