Programming/Java

[Java9 프로그래밍] 04. 제어 흐름 (Control Flow)

빠모스 2020. 3. 13. 19:02
반응형

분기와 루프

  • 구조적으로 프로그래밍을 지원하는 if (분기), for (루프, 반복)
  • 과거에는 goto라는 분기문을 사용했다. 특정 라인으로 바로 점프할 수 있지만 코드가 복잡해지면서 코드의 유지보수가 힘들어짐. 이것을 수학적으로 증명한 것이 구조적 프로그래밍.
  • 문법은 C++과 자바스크립트, 파이썬, Kotlin, Swift와 유사.

분기, Branching

 

if문은 괄호 안에 조건이 들어가고, 그 뒤에 한 문장 또는 중괄호로 감싼 문장이 옴.

if (boolean 혹은 condition){
	statement;
}

 

비교 연산자의 결과 값은 모두 boolean 타입

 

  • 크다 : x>y
  • 작다 : x<y
  • 같다 : x==y
  • 다르다 : x!=y
  • 크거나 같다 : x>=y
  • 작거나 같다 : x<=y

=> 이런 비교연산자의 결과값은 항상 참이나 거짓, boolean타입이다.

 

<예시 1> 

age변수의 데이터를 가지고 성인인지 아닌지 여부 판별하는 코드

int age = 40;

boolean isAdult = age>19;

// => isAdult에는 True가 저장되게 됨.

if (isAdult) {

}

<예시 2>

학생들의 평균 성적을 가지고 등급을 매기는 코드

double average = 95.5;

String grade = “”;

if (average >= 90) {

grade = “A”;

}

else if (average >=80) {

grade = “B”;

}

else if (average >=70) {

grade = “C”;

}

else {

grade = “F”;

}

 

논리 연산자

  • 그리고 (AND) : TRUE&&TRUE : 앞 뒤 boolean 값이 모두 true일때 true
  • 또는 (OR) : TRUE || TRUE : 앞 뒤 boolean 값 중 하나라도 true일 때 true
  • 부정 (NOT) : !(TRUE or FALSE) : boolean 값을 반전 (부정)

논리연산자 문법

 

boolean result = (값 비교연산자 값) (논리연산자) (값 비교연산자 값)

 

<예시 1>

double average = 91.6;

int dayoff = 0;

boolean result = (average>=90)&&(dayoff==0)

// TRUE && TRUE임으로 result엔 TRUE가 할당됨.

if (result) {

}

 

 

문자열 비교

  • JAVA의 비교연산은 기본타입에만 사용 가능
  • 문자열(String)은 Java의 기본타입이 아님.

문자열의 비교 연산

 

<예시 1>

String name = “Hong gildong”

if (name == “Hong gildong”) // => 문자열에선 == 연산자 사용 안하고, 이렇게 되면 False 반환.

if (name.equals(“Hong gildong”) //=> 문자열에선 equals() 메소드 사용.
  • 문자열의 첫 부분만 검사하는 방법은 startsWith() 사용
  • 문자열의 끝 부분만 검사하는 방법은 endsWith() 사용

<예시 2>

String welcomeMessage = “…”;

if (welcomeMessage.startsWith (“Lorem Ipsum”) ) {

}

if (welcomeMessage.endsWith (“Lorem Ipsum”) ) {

}

 

switch : 제한된 개수의 상수값을 기준으로 표현식을 검사할 때 사용

 

분기를 표현하는 다른 방법

 

<예시 1>

int x = 7;

switch(x) {
	case 1 : case 5 : case 7 : 
    	System.out.println(“RED”);
		break;
	case 2 :
		System.out.println(“BLUE”);
		break;
	case 3 :
		System.out.println(“GREEN”);
		break;
	default :
		System.out.println(“NONE”);
}

=> 편해보이지만, 주의할점은 잘못쓰면 프로그램이 작동 안함. 또한, 각 케이스별로 break를 걸어줘야 함. 안걸어주면 계속 다음 케이스로 넘어감. 

=> 자바에선 원래 switch를 많이 안썼는데, 자바7부터 x값에 String 타입도 올 수 있게되며 많이 쓰임.

 

실습 코드

package java9Politec;

import java.util.Scanner;

public class Lesson03_ControlFlow {
	public void ifElse(int age) {
		
		// Scanner로 입력받은 값은 무조건 문자열이므로 인트형으로 바꿔줘야 함.
		if (age>=20) {
			System.out.println("adult");
		} 
		else {
			System.out.println("not adult");
		}
	}
	
	public void ifAndOr(int age) {
		// 비교연산자와 논리연산자를 같이 사용해서 만들어보자.
		if (age>=20 && age<40) {
			System.out.println("청년");
		} else if (age>40 && age<60) {
			System.out.println("장년");
		} else {
			System.out.println("etc");
		}
	}
	// switch문 활용하기. 범위가 아니라 정확한 값을 가지고 분기할 때 편리하다.
	public void swItch(String color) {
		switch (color) {
		case "red": 
			System.out.println("you're energetic.");
			break;
		case "blue":
			System.out.println("you're emotional.");
			break;
		case "green": case "yellow":
			System.out.println("I don't know.");
			break;
		default:
			System.out.println("I can't know.");
		}
		// => break를 걸지 않으면 모든 케이스가 다 출력됨.
		// java7부터 switch문에 String을 쓸 수 있게 되면서 많이 쓰이기 시작했다.
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner fromUser = new Scanner(System.in);
		System.out.print("Put your age");
		String theAge = fromUser.next();
		int age = Integer.parseInt(theAge);
		
		
		Scanner in = new Scanner(System.in);
		System.out.println("Your favorite color");
		String color = in.next();
		
		
	}

}

 

반응형