유난스런 개발 기록

[JAVA] Day-6 _ 조건문(if문, if else문, else if문, switch문) 본문

개념정리/JAVA

[JAVA] Day-6 _ 조건문(if문, if else문, else if문, switch문)

yourhwan 2023. 1. 12. 01:18

day-6

조건문(if문, if else문, else if문, switch문)


조건문이란? 

  • 프로그램을 제어할 때 사용하는 문법으로 가장 기본적이고 중요한 문법이다.
  • 크게 조건 제어문과 반복 제어문으로 구성된다.

 

if문

  • if문의 조건식이 참이어야 블록 안에 지정된 수행문이 실행된다.
  • 수행문이 한줄이면 블록 {}를 생략할 수 있다.
public class MemberMain {

	public static void main(String[] args) {
    
    	int score =95;
        
        if(score> 80) {
        	System.out.println("합격입니다.")
        }
    }
}

 

중첩 if문

  • if문 안에 다시 if문을 중첩해서 사용한 것이다.
  • 중첩 제한은 없다.
package my.day06.a.IF;

public class MemberMain {

	public static void main(String[] args) 
    
        int score =95;
        
        if(score> 80) {
        	if(score>=90) {
        		System.out.println("차석으로.")
           }
        } 
    	 System.out.println("합격입니다.")
    
	}
	
}

 

if else문

  • if문 하나만 이용하면 조건식이 참인 경우에만 시행이 된다.
  • 이때 거짓인 조건식을 통해 프로그램을 실행하려면 else를 붙여서 사요한다.
package my.day06.a.IF;

public class MemberMain {

	public static void main(String[] args) {
    
    	int num = 100;
        int num2 = 90;
    
    	if(num > num2) {
			System.out.println(num +"이"+ num2+"보다 큽니다.");
		}
		else {
			System.out.println("num +"이"+ num2+"보다 크지 않거니 깉습니다.");
		}

    }

}

 

if ~ else if문

  • if의 조건식이 참이면 if의 수행문이 실행
  • else if의 조건식이 참이면 else if의 수행문이 실행
  • else의 조건식이 참이면 else의 수행문이 실행
package my.day06.a.IF;

public class MemberMain {

	public static void main(String[] args) {
    
    	int num = 100;
        int num2 = 90;
    
    	if(num > num2) {
			System.out.println(num +"이"+ num2+"보다 큽니다.");
		}
		else if(num < num2){
			System.out.println("num +"이"+ num2+"보다 작습니다.");
		}
        else {
        	System.out.println("num +"은"+ num2+"와 같습니다..");
        }

    	}

}

 

오늘 수업시간에 진행한 실습 코드로 마무리

package my.day06.a.IF;

public class Member {
	// 필드를 생성해준다. (멤버변수, 클래스변)
	String id;
	String name;
	String nickname;
	
	// 필드값을 호출하는 메소드를 생성, 리턴타입은 보이드로 없다.
	void showInfo() {
		System.out.println("\n=== "+ name + "님의 회원정보 ==="
				+ "+1. 아이디: \" + id + \n"
				+ "+2. 이름: \" + name + \n"
				+ "+1. 닉네임: \" + nickname + \n"
				
				);

	}

}
package my.day06.a.IF;

public class MemberMain {

	public static void main(String[] args) {

		// 인스턴스를 생성해 각각의 회원들의 정보를 넣어준다.
		new Member();						// 생성자로 새로운 멤버를 만들어준다.
		Member mbr1 = new Member();			// 새로운 멤버의 값을 mbr1에 저장
		mbr1.id = "leess";
		mbr1.name = "이순신";
		mbr1.nickname = new String("장군");
		
		Member mbr2 = new Member();			// 새로운 멤버의 값을 mbr2에 저장
		mbr2.id = "eomjh";
		mbr2.name = "엄정화";
		mbr2.nickname = new String("가수");
		
		Member mbr3 = new Member();			// 새로운 멤버의 값을 mbr3에 저장
		mbr3.id = "leess";
		mbr3.name = "이순신";
		mbr3.nickname = new String("장군");
		
		// 조건문을 통해 멤버들간의 메모리 주소를 비교 후 결과를 출력해보자.
		if(mbr1 == mbr2) {
			// 인스턴스(객체) 와 인스턴스(객체) 를 비교(==)할 때는 메모리상에 올라가 있는 인스턴스(객체)의 메모리상의 주소를 비교한다.
			System.out.println("인스턴스 mbr1 과 인스턴스 mbr2 는 동일한 메모리 주소를 참조하고 있습니다.");
			
		}
		else if(mbr1 == mbr3) {
			// 두 객체는 필드값은 같지만 메모리상의 주소가 다르다. 왜냐하면 참조변수의 형태이기 때문에 각자 메모리 공간을 할당 받는다.
			System.out.println("인스턴스 mbr1 과 인스턴스 mbr3 은 동일한 메모리 주소를 참조하고 있습니다.");
		}
		else {
			System.out.println("인스턴스 mbr1 과 인스턴스 mbr2 와 mbr3은 모두 다른 메모리 주소를 참조하고 있습니다.");
			
		}
		
		System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		
		String passwd_1 = new String("abcd");	//passwd 인스턴스 생성 후 값을 넣어준다.
		String passwd_2 = new String("abcd");
		// 조건문을 통해 인자가 같은 참조변수도 메모리상에 독립적으로 올라가는지 확인해보자.
		if(passwd_1 == passwd_2) {
			// 인스턴스(객체) 와 인스턴스(객체) 를 비교(==)할 때는 메모리상에 올라가 있는 인스턴스(객체)의 메모리상의 주소를 비교한다.
			System.out.println("passwd_1 과 passwd_2 는 동일한 메모리 주소를 참조하고 있습니다.");
		}
		else {
			System.out.println("passwd_1 과 passwd_2 는 서로 다른 메모리 주소를 참조하고 있습니다.");
			
		}
		
		System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		
		String passwd_3 = "abcd"; // String 타입은 문자열 저장소로 많이 쓰인다. 때문에 참조변수 new처럼 잘 사용하지 않는다.
		String passwd_4 = "abcd"; // 웹에 들어가면 String만 사용한다.
		
		if(passwd_3 == passwd_4) {
			// passwd_3 에 저장된 값("abcd")과 passwd_4 에 저장된 값 ("abcd")을 비교하는 것이다. 
			// 인스턴스(객체) 와 인스턴스(객체) 를 비교(==)할 때는 메모리상에 올라가 있는 인스턴스(객체)의 메모리상의 주소를 비교한다.
			System.out.println("passwd_3 과 passwd_4 는 동일한 값을 갖고 있습니다.");
		}
		else {
			System.out.println("passwd_1 과 passwd_2 는 서로 다른 값을 갖고 있습니다.");
			
		}
		
		System.out.println("\n~~~~~~~ 문자열 값을 비교시 .equals() 메소드를 사용하자 ~~~~~~~\n");
		
		if(passwd_1.equals(passwd_2)) {
			// passwd_3 에 저장된 값("abcd")과 passwd_4 에 저장된 값 ("abcd")을 비교하는 것이다. 
			// 인스턴스(객체) 와 인스턴스(객체) 를 비교(==)할 때는 메모리상에 올라가 있는 인스턴스(객체)의 메모리상의 주소를 비교한다.
			// equals()는 메모리상의 주소가 아닌 우리가 지정해준 값을 비교해준다.
			System.out.println("passwd_1 과 passwd_2 는 동일한 값을 갖고 있습니다.");
		}
		else {
			System.out.println("passwd_1 과 passwd_2 는 서로 다른 값을 갖고 있습니다.");
			
		}
		
		System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		
		
		if(passwd_3.equals(passwd_4)) {
			// passwd_3 에 저장된 값("abcd")과 passwd_4 에 저장된 값 ("abcd")을 비교하는 것이다. 
			// 인스턴스(객체) 와 인스턴스(객체) 를 비교(==)할 때는 메모리상에 올라가 있는 인스턴스(객체)의 메모리상의 주소를 비교한다.
			// equals()는 메모리상의 주소가 아닌 우리가 지정해준 값을 비교해준다.
			System.out.println("passwd_3 과 passwd_4 는 동일한 값을 갖고 있습니다.");
		}
		else {
			System.out.println("passwd_3 과 passwd_4 는 서로 다른 값을 갖고 있습니다.");
			
		}
		System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		
	// if(mbr1.id == mbr3.id) 는 사용하지 마세요!! 이것은 메모리 주소 비교
		// 해당 조건문은 mbr1과 mbr3의 id값을 비교하여 조건에 맞게 출력해준다.
		if(mbr1.id.equals(mbr3.id)) {
			System.out.println(mbr1.id+ " 와 " +mbr3.id+ " 은 같습니다.");
		}
		else {
			System.out.println(mbr1.id+ " 와 " +mbr3.id+ " 은 같지 않습니다.");
		}
		
	//	if(mbr1.nickname == mbr3.nickname) 는 사용하지 마세요!! nickname은 new라는 참조변수를 사용했기 때문에 ==을 사용하면 메모리주소를 비교한다.
		if(mbr1.nickname.equals(mbr3.nickname)) { // 이것은 값비교
			System.out.println(mbr1.nickname+ " 와 " +mbr3.nickname+ " 은 같습니다.");
		}
		else {
			System.out.println(mbr1.nickname+ " 와 " +mbr3.nickname+ " 은 같지 않습니다.");
		}  

		
	}
	

}

 

 

switch문

  • if~else if문과 유사하다. 하지만 반복의 기준이 조건식이 아닌 특정 값이다.
  • 기준값은 case의 수행문이며, 이와 일치하지 않으면 default에 해당하는 기본 수행문이 실행된다.
switch(기준값) {

	case 비교값1:
    		 수행문1;
         
 	case 비교값2:
    		 수행문2;   
	
    	default:
    	 	 기본 수행문;
    }

 

기본 형태는 위와 같다.

지정해준 값만 고려하면 되어서 개인적으로 가장 쉽게 느껴지는 문법이다.

실습 때 진행했던 성적처리 프로그램인데, 혼자 다시 작성해본 코드를 올리며 반복문을 마무리하겠다...!

package yeonsoupmoonjae.For;

public class Sungjuk {

	String hakbun;
	String name;
	byte kor;
	byte eng;
	byte math;

	
	boolean checkJumsu(byte jumsu) {
		if( 0 <= jumsu && jumsu <=100) {
			return  true;
		}
		else {
			System.out.println(">> [경고] 점수 입력은 0 이상 100 이하로 가능합니다. <<");
			return false;
		}
	}// end of boolean checkJumsu(byte jumsu)
	
	void showInfo() {
		
		short total = (short) (kor+eng+math);
		float avg = Math.round(total)/3.0F;
		
		String hakjum = "";
		if(90 >= avg) 		hakjum = "A";
		else if(80 >= avg) 	hakjum = "B";
		else if(70 >= avg) 	hakjum = "C";
		else if(60 >= avg) 	hakjum = "D";
		else 				hakjum ="F";
		
		
		String gift = "";
		switch (hakjum) {
		case "A":
			gift = "아이패드";
			
			break;
		case "B":
			gift = "에어팟";
			
			break;
			
		case "C":
			gift = "자바의 정석";
			
			break;
		case "D":
			gift = "스타벅스 기프티콘";
			
			break;
		
		default:
			gift = "사랑의 매";
			break;
		}// end of switch()---------------------------
		
		
		
		System.out.println("====="+name+" 님의 성적정보=====\n"
						+ "1. 학번 : "+ hakbun+"\n"
						+ "2. 이름 : "+ name+"\n"
						+ "3. 국어 : "+ kor+"\n"
						+ "4. 영어 : "+ eng+"\n"
						+ "5. 수학 : "+ math+"\n"
						+ "5. 총점 : "+ total+"\n"
						+ "6. 평균 : "+ avg+"\n"
						+ "6. 학점 : "+ hakjum+"\n"
						+ "7. 선물 : "+ gift
						
				);
						
	
	
		}// end of void showInfo()--------------------------
	
	
}
package yeonsoupmoonjae.For;

import java.util.Scanner;

public class SungjukMain {


	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		Sungjuk yunhwan = new Sungjuk();
		
		System.out.println("1. 학번 : ");
		yunhwan.hakbun = sc.nextLine();
		
		System.out.println("2. 성명 : ");
		yunhwan.name = sc.nextLine();
		
		
	try {	
		System.out.println("3. 국어 : ");
		byte kor = Byte.parseByte(sc.nextLine());
		
		if(yunhwan.checkJumsu(kor)) {
			yunhwan.kor = kor;
		}
		else {
			sc.close();
			return;
		}
			
			
		System.out.println("4. 영어 : ");
		yunhwan.eng = Byte.parseByte(sc.nextLine());
		
		if(yunhwan.checkJumsu(kor)) {
			yunhwan.kor = kor;
		}
		else {
			sc.close();
			return;
		}
		
		System.out.println("5. 수학 : ");
		yunhwan.math = Byte.parseByte(sc.nextLine());
		
		if(yunhwan.checkJumsu(kor)) {
			yunhwan.kor = kor;
		}
		else {
			sc.close();
			return;
		}
		yunhwan.showInfo();
		
		
	} catch(NumberFormatException e) {
		System.out.println(">> [경고] 점수 입력은 0 이상 100 이하로 가능합니다. <<");
		
	}
	sc.close();
		
		
	}// end of main(String[] args)--------------------------- 

}

 

다음엔 try~catch를 적용해서 예외처리까지 넣은 프로그램을 만들어보고싶다.

기능 하나씩 추가하고싶은 욕심이 들면 흥미도 더 생기고 의욕도 더 생기는 거 같다!