728x90

 

 

생성자(constructor)

메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드

 

new연산자가 heap 메모리에서 생성한 공간에 값을 초기화하는 역할을 하고 나서

생성자가 객체의 필드 초기화시키는 역할

public class Academy { private int studentNo; private String name;
    // 기본 생성자 
    public Academy() {} 

    //매개변수 있는 생성자
    public Academy(int studentNo, String name) {
        this.studentNo = studentNo; 
        this.name = name;
    } 
}
[접근제한자] [예약어] class 클래스명 {
	[접근제한자] 클래스명() { }
	[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; } 
}

 

 

종류

매개변수 있느냐 없느냐가 기준

 

1)기본 생성자(default constructor)

매개변수가 없는 생성자

작성하지 않은 경우, 클래스 사용 시 JVM이 자동으로 기본 생성자 생성

 

2)매개변수 생성자

매개변수가 있는 생성자

 

1)매개변수를 통해 전달받은 값으로 필드 초기화

    - 매개변수가 있기에 매개변수를 통해서 값을 받을 수 있다

    - 매개변수를 통해 필드 초기화한다는 의미는 값을 넣는다는 의미를 포함한다

2)기본 생성자를 만들어두지 않고 매개변수가 있는 생성자만 만들었을 경우 기본생성자는 자동으로 생성되지 않음

      (매개변수 생성자 작성시, 자동생성x)

3)상속에서 사용시, 반드시 기본생성자 작성

4)오버로딩을 이용하여 작성

 

객체 생성 시 전달받은 값으로 객체를 초기화 하기 위해 사용

  • 매개변수 생성자 작성 시, JVM이 기본 생성자를 자동으로 생성해주지 않음
  • 상속에서 사용 시 반드시 기본 생성자를 작성
  • 오버로딩을 이용하여 작성

 

생성자 규칙

  1. 클래스명과 메소드명이 동일하다.
  2. 리턴타입을 정의하지 않는다. (void도 사용하지 않는다.)

 

특징

생성자(Member())도 메소드의 일종으로 취급

메소드가 아닌 이유 : 생성자의 규칙이 있기 때문

생성자와 메소드의 차이

Member()라고 하는 생성자에도 ()가 들어가있음

*소괄호 ( ) : 매개변수 지정하는 역할

 


 

생성자와 관련된 개념

 

오버로딩(Overloading)

한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법

 

오버로딩 조건

1)같은 메소드 이름

2)매개변수의 개수 or 타입 or 순서가 달라야함

     반환타입에 영향 안줌

     매개변수에만 영향을 줌

     매개변수명이 다르다고 해도 개수,타입,순서가 같으면 중복에러남

 

this 레퍼런스 변수

예약어로써, 모든 인스턴스 메소드에 숨겨진 채 존재하는 레퍼런스로 할당된 객체를 가리킴

함수 실행 시 전달되는 객체의 주소를 자동으로 받음

  • 인스턴스 자신을 가리키는 참조변수
  • this()생성자와 연관 x
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
  • 내 주소값을 가지고 있는 변수
public class Academy{
		private String name; 
		public Academy() { }
		public Academy(String name) { **this.name = name;**  }
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

위와 같이 매개변수를 가지는 생성자에서 매개변수 명이 필드명과 같은 경우,

매개변수의 변수명이 우선이므로 this 객체를 이용하여 대입되는 변수가 필드라는 것을 구분해줌

 

 

this() 생성자

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출 시 첫 줄에서만 사용 가능
public class Academy{
		private int age; private String name;
		public Academy() { **this(20, “김철수”)**; } 
		public Academy(int age, String name) {
				this.age = age;     
				this.name = name;  
		}
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

728x90
반응형
728x90

 

필드의 접근제한자(Access Modifiers)

접근할 수 있는 범위를 제한해주는 것

여기서 접근의 의미는 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버로의 접근을 의미

경우에 따라 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막아야하거나 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 하는데 이때 필요에 따라 해당 종류의 접근 제한자를 사용한다

 

[접근제한자] [예약어] class 클래스명 {

  ( [ ]치면 생략가능 의미 )

 

 

 

필드의 예약어(reserved word)

예약어란 자바에 등록되어 있어서 의미가 약속되어 있는 단어를 뜻함

이미 프로그램 상에 특정 기능을 하도록 사용되기에, 이 단어들은 속성의 변수명, 메소드명으로 사용할 수 없다

     ex) for, do, try, catch, finally, extends, implements, import, instanceof ….

1.static

2.final

 

1.static

같은 타입의 여러 객체가 공유할 목적의 필드에 사용

프로그램 start시에 정적 메모리 영역에 자동 할당되는 멤버에 적용

public class Academy { 
	private static int temp1; 
}

 

2.final

하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어

변수 앞에 쓰면 변수는 상수가 되는 것

class 앞에 클래스 예약어로도 씀

public class Academy { 
    private final int TEMP1 = 100; 
    private int temp4;
}

 

728x90
반응형
728x90

 

객체지향 3대 특징 +@ 추상화

따로 정리

 

객체, 클래스, 멤버변수의 간단 설명

 

클래스 부분 수업 내용

클래스

1.객체지향언어 관련 설명

2.클래스 안에 구성되어 있는 것들 : 필드(멤버변수)

3.패키지/임포트

4.필드

5.생성자(constructor)

6.메소드(method)

 

 

728x90
반응형
728x90

 

OOP 공부하면서 캡슐화 개념 이해 + 입출금 잔액조회

코드 해보기!

머릿 속에 다른 클래스의 인자에서 해당 클래스의 매개변수로 데이터 넣기가 포인트 찍힘

 

 

package chap05_OOP.A_encapsulation;

public class Run {

	public static void main(String[] args) {

		
		Encapsulation01 encap = new Encapsulation01();
		encap.deposit(100);
		encap.withdraw(50);
		encap.withdraw(150);
		encap.checkBalance();
	}

}

 

728x90
반응형
728x90

 

깊은복사는 값 자체를 가져다 사용 

얇은 복사는 주소를 가져다 사용

 

 

1.얕은 복사(shallow copy)

주소값 동일 (같은 주소값 참조)

값 자체 동일

int[] arr1 = new int[3];
int[] arr2 = arr1;

new 연산자가 공간 생성 & 주소값 생성하고,

heap의 주소값이 대입연산자 때문에 주소값0x100이 stack의 변수로 들어가게 됨

 

arr1의 값은? 0x100

대입연산자에 의해서 arr1에도 0x100이 들어가 있음

arr2 = arr1;에 의해 arr2에도 arr1과 같이 0x100의 주소값이 들어감

즉, 같은 주소값을 참조하는 것이며 같은 주소값을 참조하기에 둘이 같이 값을 공유한다

arr1[0] = 10;
System.out.println(arr1[0]); // 10
System.out.println(arr2[0]); // 10

 

 

아래처럼 그림으로보면 같은 곳을 화사룦가 가리키고 있다

 

 

public void method01() {
		
		// 1.얕은 카피(shallow copy) 
		
		int[] originArr = {1,2,3,4,5};
		int[] copyArr = originArr;
		
		System.out.println(originArr);  // 결과값 : [I@74a14482
		System.out.println(copyArr);	// 결과값 : [I@74a14482
		System.out.println();
		
		for(int i=0; i<originArr.length; i++) {
			System.out.print(originArr[i]+" ");  // 1 2 3 4 5 
		}
		System.out.println();
		for(int i=0; i<copyArr.length; i++) {
			System.out.print(copyArr[i]+" ");    // 1 2 3 4 5 
		}
		System.out.println();
		System.out.println();
		
		// 원본 배열값 변경
		originArr[0] = 99;
		
		for(int i=0; i<originArr.length; i++) {
			System.out.print(originArr[i]+" ");  // 99 2 3 4 5 
		}
		System.out.println();
		for(int i = 0; i < copyArr.length; i++) {
			System.out.print(copyArr[i]+" ");    // 99 2 3 4 5
		}
		System.out.println();
		// 변경된 값이 똑같이 반영
	}

 


 

2.깊은 복사(deep copy)

새로운 배열을 만들어 기존 데이터를 모두 복사해오는 것

새로 만들어 복사하기에 원본과 복사본의 주소값이 다르고, 원본값이 변해도 복사본에 영향x

 

deep copy 3가지 방법

A. for문 이용

B. System.arraycopy()

C. Arrays.copyof()

 

A. for문 이용

public void method02() {
		
// 2.깊은 카피(deep copy) 
// 	  1) for문 이용

int[] originArr = {1,2,3,4,5};
int[] copyArr = new int[5];

System.out.println(originArr); // 결과값 : [I@74a14482
System.out.println(copyArr);   // 결과값 : [I@33909752

for(int i=0; i<originArr.length; i++) {
	System.out.print(originArr[i]+" ");
}
System.out.println();
for(int i=0; i<copyArr.length; i++) {
	System.out.print(copyArr[i]+" ");
}
System.out.println();
System.out.println();


for(int i=0; i<originArr.length; i++) {
	copyArr[i] = originArr[i];
}

for(int i=0; i<originArr.length; i++) {
	System.out.print(originArr[i]+" ");
}
System.out.println();


//


originArr[0] = 99;

for(int i=0; i<originArr.length; i++) {
	System.out.print(originArr[i]+" ");
}
System.out.println();
for(int i=0; i<copyArr.length; i++) {
	System.out.print(copyArr[i]+" ");
}
System.out.println();
System.out.println();

}

 

B. System.arraycopy()

배열길이 자동 수정 X

복사된 값의 나머지 공간은 해당 배열의 데이터 타입의 기본값으로 채워진다

 

ex) int 배열값을 복사하고 나머지 공간은 0으로 채워진다

double 배열값을 복사하고 나머지 공간은 0.0 char 배열값을 복사하고 나머지 공간은 공백 String 배열값을 복사하고 나머지 공간은 null

 

System.arraycopy()의 형태

System.arraycopy(src, srcPos, dest, destPos, length);
// src : 원본 배열
// srcPos : 포지션. 원본배열에서 복사를 시작할 위치
// dest : 복사 배열
// destpos: 복사 배열에서 붙여놓기를 시작할 위치
// length : 얼만큼 복사를 해올지에 대한 복사 길이

 

public void method03() {


// 2.깊은 카피(deep copy) 
// 	  2)System.arraycopy()


int[] originArr = {1,2,3,4,5};
int[] copyArr = new int[10];


// 원본 배열의 0(index)번째부터 원본배열 길이만큼 복사한 것을 복사 배열 3번째서부터 붙여넣기
// System.arraycopy(src, srcPos, dest, destPos, length);

System.arraycopy(originArr, 0, copyArr, 3, originArr.length);
// 인덱스 3번째부터 넣기에 앞의 셋은 000이고 오리진arr5개값 뺴고 나머지도 0으로 채워짐

for(int i=0; i<originArr.length; i++) {
    System.out.print(originArr[i]+" ");  // 1 2 3 4 5 
}
System.out.println();
for(int i=0; i<copyArr.length; i++) {
    System.out.print(copyArr[i]+" ");  // 0 0 0 1 2 3 4 5 0 0 
}

 

C. Arrays.copyof()

Arrays.copyOf(original, newLength)
	- original : 원본
	- newLength : 얼마만큼 복사할지

배열 길이 자동 수정 O

배열 길이만큼 복사해오기에 System.arraycopy()처럼 공간이 남지않는다 원본 길이보다 길게 복사할 경우, 남는 공간은 원본의 데이터타입 기본값으로 채운다

public void method04() {

    // 3) Arrays.copyof()

    int[] originArr = {1,2,3,4,5};
    int[] copyArr = new int[10];

    for(int i=0; i<originArr.length; i++) {
        System.out.print(originArr[i]+" ");
    }
    System.out.println();
    for(int i=0; i<copyArr.length; i++) {
        System.out.print(copyArr[i]+" ");
    }
    System.out.println();


    // Arrays.copyof()
    // Arrays.copyOf(original, newLength)
    // original : 원본
    // newLength : 얼마만큼 복사할지

    Arrays.copyOf(originArr, originArr.length);

    // Arrays.copyOf 위에 마우스 포인터 올리고 나오는 '노란색 설명'
    // int[] java.util.Arrays.copyOf(int[] original, int newLength)
    // java util.Arrays
    // 맨 앞에 값 int[]의 의미: 반환값 데이터타입이 무엇인지 알려줌. 즉 int[] 인트 배열을 반환함


    copyArr = Arrays.copyOf(originArr, originArr.length); //copyArr에 담음 

    for(int i=0; i<originArr.length; i++) {
        System.out.print(originArr[i]+" "); // 1 2 3 4 5 
    }
    System.out.println();
    for(int i=0; i<copyArr.length; i++) {
        System.out.print(copyArr[i]+" ");   // 1 2 3 4 5
    }
    System.out.println();

    // 원본 배열값 변경
    originArr[0] = 99;
    for(int i=0; i<originArr.length; i++) {
        System.out.print(originArr[i]+" "); // 99 2 3 4 5 
    }
    System.out.println();
    for(int i=0; i<copyArr.length; i++) {
        System.out.print(copyArr[i]+" ");   // 1 2 3 4 5
    }
    System.out.println();
}

 

 

 

728x90
반응형
728x90

 

하나의 값만 저장하는 공간인 변수는 하나만 저장이 가능하기에 배열이 만들어짐

 

배열이란?

같은 자료형의 데이터의 여러개의 값을 저장할 수 있는 공간

 

배열 선언

자료형[] 배열명; // 자바식. 대부분 이쪽 사용
자료형 배열명[]; // C언어식.

int[] arr;

배열은 선언만해서는 쓸 수 없고 할당까지 해야함

배열은 기본자료형이 아니며 참조자료형처럼 사용

구조가 참조자료형처럼 되어있어 주소값을 갖는다

기본형, 참조형 구분 기준 : call by value & call by reference

즉, 주소값을 가져오느냐 값 자체를 그대로 복사해서 가져오느냐

 

* Stack 영역에 공간 생성

 


 

배열 할당

heap 메모리 영역에 공간을 생성하는 것

(변수의 선언 : stack에 공간 차지)

자료형[] 배열명 = new 배열명[배열길이]
자료형 배열명[] = new 자료형[배열길이]

메모리 영역에 공간을 생성해주는 역할을 new 연산자가 실행

new 연산자가 배열 할당하는 역할+heap영역에 생성된 공간에 대한 주소값을 발생시킴

 

배열의 크기 변경 가능할까?

배열은 크기 변경 불가

새로운 배열을 만들고 바꿔치기하거라 주소값이 바뀐다(0x100→0x200)

System.out.print("새로 할당할 배열의 길이 입력 : ");
		int size = sc.nextInt();
		
		double[] dArr = new double[size];
		System.out.println("dArr의 길이 : "+dArr.length);
		System.out.println("dArr의 주소값 : "+ dArr); // [D@74a14482
		
		dArr = new double[5];
		System.out.println("변경 후 dArr의 길이 : " + dArr.length);// 배열 길이 변경 가능
		System.out.println("변경 후 dArr의 주소값 : " + dArr);		 // but 길이 변경 후 주소값 달라짐 [D@1540e19d
		System.out.println();								 // 
		// 주소값하면 new 연산자가 떠올라야. 
		// dArr[30]에서 new연산자가 쓰이면서 새로운 공간생성과 함께 주소값 생성하기에 주소값이 달라짐

그래서 주소값이 바뀌는 것(0x100→0x200)

기존 배열 유지x

new연산자에 의해 heap영역에 새로운 배열의 공간이 생성되고 그에 따라 stack에 있는 변수명 dArr의 참조 변수값(주소값)도 0x100→0x200 바뀜

 

new 연산자 역할

1)배열 할당 : heap 메모리 영역에 공간 생성

2)heap 영역에 생성된 공간에 대한 주소값 생성

-배열 한칸이 아닌 배열 한덩이 전체에 대한 주소값

ex)주소값 0x100

heap이 컴퓨터와 사용자가 같이 사용하는 공간인 것

배열명에 담긴게 heap메모리 영역에 생성된 주소값을 담은 것

주소를 통해서 실제 데이터를 가리키는 것이다.

 


 

배열 초기화

1)인덱스 이용

  1. 중괄호{}를 이용
  2. for문 이용

1)인덱스 이용

배열명[인덱스] 값;
ex) 
int[] iArr = new int[3];
iArr[0] = 1;
iArr[1] = 2;
iArr[2] = 3;
iArr[3] = 4; // error : 배열이 3칸 할당됬는데 없는 4칸째에 값을 할당하려해서 

 

2) 중괄호{} 이용

자료형[] 배열명 = {값,값};
ex)
int[] arr = {1,2,3,4}; // 값 수에 따라 알아서 배열 칸 지정하고 생성함

 

3) for문 이용

내가 초기화할 값에 ‘규칙’이 존재할 경우 사용가능

for문 인덱스 이용한거라 int만 가능

for(int i=0; i<str.length; i++) {   
    arr[i] = i + 1;
}

 


배열 삭제

null 상태로 만드는게 삭제

**dArr = null;**

null을 넣으면 0x100→0x200 바뀐주소가 null로 바뀌면서 0x200과 연결이 끊어지면서 0x200의 데이터는사리지고 사실상 삭제 효과가 나타난다

 

728x90
반응형
728x90

 

랜덤 정수 출력

Math.random()

랜덤으로 숫자선택 : Math클래스의 random() 클래스 사용

임의의 0~0.9999…의 더블값을 반환

(0단계) 0 <= Math.random() >= 1 // 0~0.999999999까지 반환
(1단계) 0 <= (Math.random() * 10) < 10 // 0~9.99999
(2단계) 1 <= Math.random() * 10 + 1 < 11 // 1~10.99999	
(3단계) 1 <= (int)(Math.random() * 10 + 1) < 11 //  1~10 // 정수로 강제 형변환
// 강제형변환으로 maxNumber의 소수점 짤라줌

 

ex)사용 예제

 1부터 10 사이의 임의의 난수를 정해 1부터 난수까지의 정수 합계 (난수 임의의 숫자)

// 1부터 10 사이의 임의의 난수를 정해 1부터 난수까지의 정수 합계 (난수 임의의 숫자)

int random = (int)(Math.random() * 10 + 1);
int sum = 0; // 변수 초기화
		for(int i=1; i<=random; i++) {
				sum = sum + i;
//			sum += i;       위와 같은 코드
		}
System.out.println("1부터 "+random+"까지의 정수합계 : "+sum);

 

1부터 50까지의 임의의 난수를 뽑아 홀수인지 짝수인지 판별

public void method05_1() {		
    // 1부터 50까지의 임의의 난수를 뽑아 홀수인지 짝수인지 판별

    // 0~1
    // 1~10
    // 1~50 for문 최대치 +@
    // random 수의 범위 늘리기

    int random = (int)(Math.random() * 50 + 1); // 변수 선언

//		// 디버깅용 for문
//		for(int i=1; i<=random; i++) {
//			System.out.println("i="+i+" random="+random+"\n");
//		}

    if(random%2 == 0) {
        System.out.println(random+"은 짝수");
    }else {
        System.out.println(random+"은 홀수");
    }
}
728x90
반응형
728x90

 

스캐너로 1-9 사이 양수를 받아

해당 수의 구구단을 출력하기

 

1-9외에 입력이 들어오면 1-9사이 정수만 입력하라는 문자를 출력하고

1-9가 들어오면 num1 변수를 가지고 for문 반복으로 구구단 출력

public void while_03() {
    // 1-9 사이 수를 입력 받아 구구단 출력
    Scanner sc = new Scanner(System.in);
    System.out.println("1-9 정수입력 : ");
    int num1 = sc.nextInt();

    if(num1 < 1 || num1 > 9 ) {
        System.out.println("1-9 정수입력만 입력가능");
    }else {
        for(int i=1; i < 10; i++) {
            System.out.println(num1+" x "+i+" = "+num1*i);
        }
    }
}
728x90
반응형
728x90

 

분기문

분기문은 조건문과 반복문에 중간에서 주어진 조건의 흐름을 바꿀 수 있는 구문

1)break

2)continue

 

 

1)break

반복문 stop시키고 빠져나가게함

해당 break와 가장 가까운 반복문 하나을 나간다는 의미

public void method02() {
	Scanner sc =new Scanner(System.in);
    System.out.print("정수 하나 입력 : ");
    int num = sc.nextInt();
    
    int sum = 0;
    for(int i = 1; ; i++) {
       sum += i;
       if(i == num) {
          break;
       }
    }
    System.out.println("1부터" +num +"까지의 합은" +sum +"입니다.");
 }

 

2)continue

실행하다가 처음으로 가서 다시 반복하게하는 역할

public void method03() {
    // 1부터 100까지 정수들을 전부 합산
    // 이떄, 4의배수는 빼고 계산
    int i = 0;
    int sum = 0;

    // 1) continue 없이
    for(i = 1; i <= 100; i++ ) {
        if(i%4 != 0) {
            sum +=i;
        }
        sum += i;
    }

    // 2) continue문
    for(i = 1; i <= 100; i++ ) {
        if(i % 4 == 0 ) {// 4의배수일 떄만 true되서  건너뜀
            continue;	 // 밑에 코드는 안돌아감. 바로 i++로
        }
        sum += i;
    }
}
728x90
반응형
728x90

 

 

제어문(control flow statement)

프로그램의 수행 흐름을 바꾸는 역할

1.조건문

2.반복문

3.분기문

 

 

1.조건문

조건에 따라 다른 문장이 수행되도록 해줌

1)if

2)switch

 

if문을 주로 쓰고,

switch문은 처리해야 하는 경우의 수가 많을 때는 switch문이 유리

 

1)if문

if (조건식) {  // 조건식은 논리값(true/false)
		수행문장;
}

--> 조건식의 결과가 true면 안에 있는 문장 실행
if(조건식) {
		수행문장;
} else {
		수행문장;
}
--> 조건식의 결과가 true면, 안에 있는 문장 실행
--> 조건식의 결과가 false면, else 안에 있는 문장 실행

if else문은 조건이 2가지 일 때만 사용

3가지 이상이면 if, else if, else를 사용

 

else if

if(조건식) {
		수행문장;
} else if(조건식) {
		수행문장;
} else {
		수행문장;
}

if문은 처음에 반드시 와야함

else if는 여러 개일 수 있음

else문은 없을 수 있음

 

if문 하나에서 순차적으로 false되면 다음 조건으로 넘어가다가 true가 되면 이후 조건은 수행x

  -  if문끼리는 true라도 연속 동작함

ex)

if(month == 1 || month == 2 || month == 12) {
		season = "겨울";
		if(temperature <= -15) {
				season += "한파 경보";
		} else if(temperature <= -12) {
				season += "한파 주의보";
		}
} else if (month >= 3 && month <=5) {
				season = "봄";
} else if (month >= 6 && month <=8) {
			  season = "여름";
				if(temperature >= 35) {
						season += "폭염 경보";
				} else if(temperature >= 33) {
									season += "폭염 주의보";
				}
} else if(month >= 9 && month <= 11) {
				season = "가을";
} else { 
				season = "해당하는 계절이 없습니다.";
}

 

 

2)switch

형태

switch (조건식) {
case 값1 :
case 값2 :
case 값3 : 
default : 
}

조건식 : 정수, 문자, 문자열

조건식 정수,문자,문자열만 들어갈 수 있으므로, case의 값도 정수, 문자, 문자열 중에서 들어갈 수 있으며 해당 값이 일치하면 콜론(:)의 오른쪽 실제 실행되는 코드를 입력하면 된다

switch() ()안에 변수 값과 일치한 case 값을 true/false 논리로 해서 true되면 해당 case 안에 코드가 실행됨

어디에도 해당되지 않는 때 처리하는 것이 default ( = else)

 

if문과 switch문 차이

if문은 true가 되면 해당 조건의 코드 발동하고,

switch는 true된 코드부터 아래까지 전부 실행

if는 true가 되면 해당 코드만 실행하고 빠짐

switch는 각 case 안에 break 코드를 넣어줌

 

중첩 여부

switch끼리 중첩 가능

if switch 둘이 섞어서도 둘을 중첩해서도 모두 가능

 

예시 코드

(switch문은 주로 주문 메뉴에서 자주 쓰임)

public void method4() {
		
		// 메뉴 자판기
		// 번호지정하면 실행되는 로직
		Scanner sc = new Scanner(System.in);
		System.out.println("===메뉴===");
		System.out.println("1.간단 계산기");
		System.out.println("2.짝/홀수 판단");
		System.out.println("3.n월의 마지막 날");
		System.out.print("메뉴 번호 : ");
		int menuNum = sc. nextInt();
		
		switch(menuNum) {
		case 1:
			System.out.println("간단 계산기입니다");
			break;
		case 2:
			System.out.println("짝홀수 판단입니다.");
			break;
		case 3:
			System.out.println("n월의 마지막 날입니다.");
		// 1-3외의 다른 수가 입력된다면?
		// 아무런 반응x -> default로 해결
		default:
			System.out.println("잘못된 메뉴 번호입니다");
		}
	}

 

 

728x90
반응형

+ Recent posts