자바 개발자 일기 3일차

Shy·2023년 12월 29일

아이티윌

목록 보기
3/22

제어문

자바에서 제어문(Control Statements)은 프로그램의 흐름을 제어하는 데 사용되는 문장들이다. 이들은 조건에 따라 다른 코드가 실행되게 하거나, 코드를 반복적으로 실행하게 하는 등의 역할을 한다. 주로 사용되는 제어문에는 다음과 같은 것들이 있다.

if else

조건에 따라 다른 코드 블록을 실행한다. 조건이 참(true)일 때 실행할 코드와 거짓(false)일 때 실행할 코드를 구분할 수 있다.

if (조건) {
    // 조건이 참일 때 실행할 코드
} else {
    // 조건이 거짓일 때 실행할 코드
}

3개 이상의 다중 if문은 피하자.

예제코드


public class Ex01_if {

	public static void main(String[] args) {
		/* 제어문-분기문(비교문) : if문
		 * if(조건식) {
		 * 		실행할 문장들(조건이 참일때);
		 * }
		 */
		int num1 = 10;
		int num2 = 20;
		if (num1 < num2) {
			System.out.println("num1이 num2보다 작다.");
		}
		System.out.println(">> 비교작업 끝");
		System.out.println("-------------------");
		
		boolean result = num1 < num2;
		if(result) {
			System.out.println("num1이 num2보다 작다");
		}
		System.out.println(">> 비교작업 끝2");
		
		/*
		 * 90~100: A
		 * 80~89: B
		 * 70~79: C
		 * 60~69: E
		 * 0~59: F
		 */
		
		System.out.println("---성적 처리---");
		String name = "홍길동";
		int jumsu = 90;
		
		System.out.println("이름 : " + name);
		System.out.println("점수 : " + jumsu);
		
		String result2 = "평가안됨";
		
		if (90 <= jumsu && jumsu <= 100) {
			result2 = "A";
		} else if (80 <= jumsu && jumsu <= 89) {
			result2 = "B";
		} else if (70 <= jumsu) {
			result2 = "C";
		} else if (60 <= jumsu) {
			result2 = "D";
	    } else {
	    	result2 = "E";
	    }
		
		System.out.println("평과결과 : " + result2);
		System.out.println("---평가 끝---");


	}

}

public class Ex02_if_esle {
	
	public static void main(String[] args) {
		/*
		 * if 문 3가지 형태
		 * if (조건) {}
		 * if (조건) {} else {}
		 * if (조건) {} else if () {} else if () {} ... else{}
		 * ------------------------------------------------------
		 */
		int num1 =100;
		int num2 = 50;
		System.out.println("num1: " + num1 + " , num2: " + num2);
		
		//1. if (조건) {}
		if (num1 > num2) {
			System.out.println("num1이 num2보다 크다.");
		}
		
		if (num1 <= num2) {
			System.out.println("num1이 num2보다 작거나 같다.");
		}
		System.out.println(">> if () 끝");
		System.out.println("-------------------");
		
		// 2, if (조건) {} else {}
		if (num1 > num2) {
			System.out.println("num1이 num2보다 크다.");
		} else {
			System.out.println("num1이 num2보다 작거나 같다.");
		}
		
		// 3. if (조건) {} else if () {} else if () {} ... else{}
		if (num1 > num2) {
			System.out.println("num1이 num2보다 크다.");
		} else if (num1 == num2) {
			System.out.println("num1이 num2과 같다.");
		} else {
			System.out.println("num1이 num2보다 작다.");
		}
		System.out.println("-------------------");
	}

}

예제코드(소수점 둘째자리 나타내기)


public class Ex04_if_sungjuk {

	public static void main(String[] args) {
		/*
		 * (실습)성적처리
		 * 입력:국어(kor), 영어(eng), 수학(math)
		 * 처리: 총점(tot) = 국어 + 영어 + 수학
		 * 		평균(avg) = 총점 / 3
		 * -----------------------
		 * 평쥰 점수의 구간에 따라 평가
		 * 90~100: A
		 * 80~89: B
		 * 70~79: C
		 * 60~69: E
		 * 0~59: F 재수강하세요
		 * ========================
		 * <결과 출력>
		 * 국어 : 100
		 * 영어 : 90
		 * 수학 : 80
		 * ---------
		 * 총점: 270
		 * 퍙군 : 90
		 * 평과결과 : A
		 */
		int kor = 90;
		int eng = 23;
		int math = 44;
		
		int sum = (kor + eng + math);
		double avg = (double)sum / 3;
		avg = Math.round(avg * 100.0) / 100.0;
		System.out.println(avg);
		String result = "None";
		
		if (avg > 100 || avg < 0) {
			result = "Error";
		}
		else if (avg >= 90) {
			result = "A";
		}
		else if(avg >= 80) {
			result = "B";
		}
		else if(avg >= 70) {
			result = "C";
		}
		else if(avg >= 60) {
			result = "D";
		}
		else {
			result = "F";
		}
		
		System.out.println("국어 : " + kor + ", 수학 : " + math + ", 영어 : " + eng);
		System.out.println("평균 : " + avg);
		System.out.println("등급 : " + result);
	}

}

avg = Math.round(avg * 100.0) / 100.0; 이 코드에서는 Math.round 함수가 먼저 동작한다.

이 과정을 단계는 다음과 같다.

  1. 먼저 avg * 100.0이 실행됩니다. 이는 avg 값을 100배 증가시켜 소수점 아래 두 자리를 정수 부분으로 이동시킨다. 예를 들어, avg가 86.666...라면 이 연산 후에는 8666.6...이 된다.
  2. 그 다음 Math.round 함수가 적용된다. Math.round는 괄호 안의 값을 가장 가까운 정수로 반올림합니다. 위의 예에서 8666.6...은 8667로 반올림된다.
  3. 마지막으로 이 값을 다시 100.0으로 나눈다. 즉, 8667 / 100.0이 되어 원래 값의 소수점 두 번째 자리까지 반올림된 결과인 86.67을 얻게 된다.

이렇게 하면 소수점 두 번째 자리까지 표시되는 값을 얻을 수 있으며, 이 방법은 평균값을 정확하게 계산할 때 자주 사용된다.

예제코드(큰 수 찾기)


public class Ex05_max_number {

	public static void main(String[] args) {
		/*
		 * 숫자 3개 중 가장 큰 수를 구하시오
		 * a: 30, b: 60, c: 20
		 * <결과>
		 * 가장큰수 : 60
		 * -------------------------
		 */
		int a = 60;
		int b = 130;
		int c = 60;
		int greater = 0;
		if (a > b) {
			if (a > c) {
				greater = a;
			}
			else {
				greater = c;
			}
		} else if (b > a) {
			if (b > c) {
				greater = b;
			} else {
				greater = c;
			}
		} else if (a == b) {
			if (a > c) {
				greater = a;
			}
			else {
				greater = c;
			}
		}
		
		System.out.println("가장 큰 수 : " + greater);

	}

}

public class Ex05_max_number {

	public static void main(String[] args) {
		/*
		 * ----------------------------------
		 * (실습)숫자 5개 중 가장 큰 수를 구하시오
		 * a: 30, b: 60, c: 20, d: 15, e: 70
		 * <결과>
		 * 가장큰수: 70
		 * ----------------------------------
		 */
		
		int a = 30;
		int b = 60;
		int c = 20;
		int d = 15;
		int e = 70;
		
		int max = 0;
		
		if(a > max) {
			max = a;
		}
		if(b > max) {
			max = b;
		}
		if(c > max) {
			max = c;
		}
		if(d > max) {
			max = d;
		}
		if(e > max) {
			max = e;
		}
		
		System.out.println("가장큰수(max) : " + max);
	}

}

switch 문

하나의 변수에 대해 여러 값 중 하나와 일치하는지 확인하고, 해당하는 코드 블록을 실행한다. break 문을 사용해 각 케이스 후에 switch 문을 빠져나올 수 있다.

switch (변수) {
    case1:
        // 변수가 값1과 일치할 때 실행할 코드
        break;
    case2:
        // 변수가 값2와 일치할 때 실행할 코드
        break;
    default:
        // 어떤 케이스와도 일치하지 않을 때 실행할 코드
}

public class Ex03_swirch_case {
	
	public static void main(String[] args) {
		// switch case: 동등비교구문
		/*
		 * switch (조건값) {
		 * case 비교값1:
		 * 	실행할 문장(들);
		 * 	break;
		 * case 비교값2:
		 * 	실행할 문장(들);
		 * 	break;
		 * ...
		 * default :
		 * 	실행할 문장(들);
		 * 	break;
		 * }
		 * 
		 */
		int month = 1;
		
		// 정수형, 문자형, 문자는 되지만 실수형은 되지 않는다.
		switch (month) {
		case 1 :
			System.out.println("31일까지 있습니다.");
			break; // 중단하고 빠져나감 (break를 하지 않으면 밑에까지 실행된다.)
		case 2 :
			System.out.println("28일 또는 29일까지 있습니다.");
			break;
		case 3 :
			System.out.println("31일까지 있습니다.");
			break;
		case 4 :
			System.out.println("30일까지 있습니다.");
			break;
		default :
			System.out.println("일치하는 값이 없습니다.");
			break; // (안써도 무방. 마지막에 작성되었기 때문)
		}
		System.out.println("------------------");
		
		month = 5;
		switch(month) {
		case 1 : case 3 : case 5 : case 7 : case 9 : case 11 :
			System.out.println("31일까지 있습니다.");
			break;
		 case 4 : case 6 : case 8 : case 10 : case 12 :
			System.out.println("30일까지 있습니다.");
			break;
		case 2 :
			System.out.println("28일 또는 29일까지 있습니다.");
			break;
		}
		System.out.println("------------------");
		
		/* (실습) 추첨 결과에 따라서 삼풍 지급
		 * 1등: 냉장고, 2등: 김치냉장고, 3등: 세탁기, 4등: 청소기
		 * 등수안에 없는 경우: 꽝, 휴지증정
		 */
		String result = "5등";
		String resultMsg = "상품없음";
		
		switch(result) {
		case "1등" :
			resultMsg = "냉장고";
			break;
		case "2등" :
			resultMsg = "김치냉장고";
			break;
		case "3등" :
			resultMsg = "세탁기";
			break;
		case "4등" :
			resultMsg = "청소기";
			break;
		default :
			resultMsg = "휴지";
			break;
		}
		
		System.out.println("삼품 : " + resultMsg);
		
	}

}

주의사항

Java에서 switch 문에 사용할 수 있는 데이터 타입은 다음과 같다.

  1. 정수형: byte, short, int, char와 이들의 Wrapper 클래스인 Byte, Short, Integer, Character가 사용될 수 있다.
  2. 열거형(Enums): 열거형 타입도 switch 문에 사용될 수 있다.
  3. 문자열(String): Java 7부터는 String 타입도 switch 문에 사용될 수 있다.

그리고 다음과 같은 데이터 타입들은 switch 문에서 사용할 수 없다.

  1. 부동소수점형: float, double 및 이들의 Wrapper 클래스는 switch 문에 사용될 수 없다.
  2. 불리언형(Boolean): boolean 및 Boolean 타입도 사용할 수 없다.
  3. 객체 레퍼런스: 특정 객체의 레퍼런스나, String이나 열거형이 아닌 다른 객체 타입은 사용할 수 없다.

switch 문은 주로 제한된 값 집합 중 하나를 선택하는 데 사용되기 때문에, 주로 정수형, 열거형, 문자열이 사용된다. 이를 통해 코드의 가독성을 높이고, 복잡한 if-else 조건문을 간결하게 만들 수 있다.

for 문

일정 횟수만큼 반복해서 코드를 실행할 때 사용한다. 반복 횟수를 제어하는 초기식, 조건식, 증감식을 포함한다.

for (초기식; 조건식; 증감식) {
    // 반복해서 실행할 코드
}

에제코드


public class Ex01_for {

	public static void main(String[] args) {
		// 제어문 _ 반복문(for, while, do~while)
		// switch () {}
		// for ( 초기값설정 ; 실행(종결)조건 ; 증감설정) {실행문}
		// for ( ; ; ) {} //무한반복
		
		System.out.println("*");
		System.out.println("*");
		System.out.println("*");
		System.out.println("---------------");
		
		for (int i = 1; i < 4; i++) {
			System.out.println("*"); // 3번 반복
		}
		System.out.println("---------------");
		for (int i = 1; i <= 5; i++) {
			System.out.println("*****"); // 5번 반복
		}
	}

}

while 문

특정 조건이 참인 동안 코드 블록을 반복해서 실행한다. 조건이 거짓이 될 때까지 계속 반복한다.

while (조건) {
    // 조건이 참인 동안 반복해서 실행할 코드
}

do-while 문

while 문과 유사하지만, 조건을 확인하기 전에 최소 한 번 코드 블록을 실행한다. 조건이 참이면 계속 반복된다.

do {
    // 최소 한 번은 실행할 코드
} while (조건);

제어문은 프로그램의 흐름을 유연하게 제어할 수 있게 해주며, 이를 통해 다양한 로직을 구현할 수 있다. 조건에 따라 다르게 반응하거나, 특정 작업을 여러 번 반복하는 등의 기능을 구현할 때 매우 유용하다.

삼항 연산자

자바에서 삼항 연산자(Ternary Operator)는 간단한 조건문을 더 짧은 코드로 작성할 수 있게 해주는 연산자이다. 기본적으로 조건 ? 값1 : 값2 형태로 사용되며, 조건이 참(true)이면 값1을, 거짓(false)이면 값2를 반환한다. 삼항 연산자의 구조와 사용법은 다음과 같다.

삼항 연산자의 구조
조건: 불리언(Boolean) 표현식이다. 이 조건의 평가 결과에 따라 다른 값이 선택된다.
값1: 조건이 참일 때 반환되는 값이다.
값2: 조건이 거짓일 때 반환되는 값이다.

예시

int a = 10;
int b = 20;
int max = a > b ? a : b;  // a가 b보다 크면 a를, 그렇지 않으면 b를 max에 할당한다.

여기서 a > b는 조건이며, a는 값1, b는 값2에 해당한다. 조건이 참이면 a가 max에 할당되고, 거짓이면 b가 할당된다.


public class Ex05_conditional_operator {

	public static void main(String[] args) {
		// ? : - 조건연산자, 삼항연산자
		// 조건식 ? 실행문1 : 실행문2;
		// 조건식 ? true일때 실행문 : false일때 실행문;
		int num1 = 30;
		int num2 = 200;
		
		System.out.println("num1: " + num1 + ", num2: " + num2);
		
		String str = (num1 > num2) ? "num1이 크다" : "num1이 크지 않다";
		System.out.println("num1 > num2 결과는? " + str);
		System.out.println("----------------------");
		
		// 제어문 분기처리
		if (num1 > num2 ) {
			str = "num1이 크다";
		} else {
			str = "num1이 크지 않다";
		}
		System.out.println("num1 > num2 결과는? " + str);
	}

}

예시 (큰 수 찾기)


public class Ex05_max_number {

	public static void main(String[] args) {
		/*
		 * 숫자 3개 중 가장 큰 수를 구하시오
		 * a: 30, b: 60, c: 20
		 * <결과>
		 * 가장큰수 : 60
		 * -------------------------
		 */
		int a = 130;
		int b = 130;
		int c = 60;
        
        int compareAB = (a >= b) ? a : b;
		int largerABC = (compareAB >= c) ? compareAB : c;
		
		System.out.println("가장 큰 수 : " + largerABC);

	}

}

삼항 연산자의 장점

  • 간결성: 복잡한 if-else 구문을 간단한 한 줄의 코드로 대체할 수 있어 코드가 더 간결해진다.
  • 읽기 쉬움: 간단한 조건에 대해 코드의 가독성을 높일 수 있다.

주의사항

  • 삼항 연산자는 간단하고 직관적인 조건에 적합하다. 복잡한 로직에서는 if-else 구문을 사용하는 것이 더 가독성이 좋을 수 있다.
  • 너무 많이 중첩된 삼항 연산자는 코드를 이해하기 어렵게 만들 수 있다. 이런 경우에는 if-else 구문을 사용하는 것이 좋다.

삼항 연산자는 간결한 코드 작성에 유용하지만, 코드의 명확성과 가독성을 고려해 적절하게 사용하는 것이 중요하다.

profile
신입사원...

0개의 댓글