728x90

 

객체 배열

객체를 담는 배열

배열의 자료형을 클래스명(사용자 정의 자료형)으로 지정하여 활용

 

선언

자료형[] 배열명;

자료형 배열명[];

클래스명[] 배열명;

클래스명 배열명[];

 

할당

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

배열명 = new 클래스명[길이]

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

클래스명[] 배열명 = new 클래스명[길이];

 

 

 

초기화

배열명[인덱스] = 값;

배열명[인덱스] = new 클래스명();

 

iArr[0] = 10;

tArr[0] new Trainee();

iArr = {1,2,3};

tArr = {new Trainee(),new Trainee()};

 

 

선언과 동시에 할당 및 초기화

클래스명 배열명[] = {new 클래스명(), new 클래스명()};

 

 

객체 배열의 메모리 작동

선언된 변수명이 stack에서 공간이 만들어지고, 거기서 할당되면서 heap에서 공간이 생성되는데

이때,  배열 하나의 주소 안에서 배열의 각 인덱스번호 별로 주소가 다시 나눠지는 구조

 

728x90
반응형
728x90

 

메소드(method)

다른 프로그래밍 언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다.

자바는 이러한 클래스 내의 함수를 메소드라고 부른다.

※ 보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다. 다만 자바에서 사용되는 함수의 정확한 명칭은 메소드

위 내용의 출처 : 점프투자바

 

역할

입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것, 이것이 메소드가 하는 일

 

구조

입력값 -> 메소드 -> 리턴값

메소드는 들어온 입력값을 가지고 어떤 처리를 하여 적절한 리턴값을 돌려주는 블랙박스와 같다.

기능부분에 생성자도 있지만 메소드도 있다

 

 

메인메소드( main method)

메인메소드는 모든 형태를 다 가지고 있다

public static void main(String[] args) {
[접근제한자] [예약어] 반환타입 메소드명(매개변수) {

  - 생략가능 : 접근제한자 예약어 매개변수

 

  1. 접근 제한자
  2. 예약어
  3. 반환타입
  4. 매개변수
  5. 표현식 종류 4가지

 

접근제한자 : public private protected default

예약어 : static final 등

반환타입 :

     A. void : 반환할 게 없음. 반환값이 없다고해서 안쓰면 생성자처럼 됨. 필히 쓸 것

     B.기본자료형을 반환하는 메소드

           ex) Integer.parseInt, chataAt(), Math.random(), String.equals(),String.length() 등등

C.배열을 반환 : Arrays.copyOf()

D.클래스를 반환 : Scanner.nextLine() .nextInt 등등

메소드명

매개변수

 


1) 접근 제한자

 

2) 예약어

 

3) 메소드 반환형

 

4)메소드 매개변수

1.() : 매개변수 없음 = 전달할 값이 없음

2.기본자료형

3.배열 : 얇은 복사(주소값)

4.클래스

5.가변인자 : 매개변수의 개수가 정해지지 않은 유동적 설정

      ex)printf() - 공식API문서 printstream 확인가능

자료형... 변수명 // ...은 가변의미를 나타냄

 

※ 매개변수와 인수

public class Sample {
    int sum(**int a, int b**) {  // a, b 는 **매개변수**
        return a+b;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c = sample.sum(**3, 4**);  // 3, 4는 **인수**

        System.out.println(c);  // 7 출력
    }
}

 

5) 표현식 종류 4가지

1)반환타입 o 매개변수 o 메소드

2)반환타입 o 매개변수 x 메소드

3)반환타입 x 매개변수 o 메소드

4)반환타입 x 매개변수 x 메소드

 

 


 

메소드와 생성자 구분법

구분기준 : 반환 여부

public Book() {

} // 반환타입이 없으므로 생성자

반환타입 o : 메소드

반환타입 x : 생성자

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

 

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

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

 

 

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

 

배열의 변수명을 그냥 print찍으면 아래처럼 주소값이 나온다

배열 안에 값을 어떻게 하면 볼 수 있을까?

 

배열 값, 출력하는 방법

1)for문

int[] baseArr = {1,2,3,4,5};

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

 

2)Arrays.toString()

java.util.Arrays의 toString() 메소드 : Arrays.toString()

int[] baseArr = {1,2,3,4,5};
System.out.println(Arrays.toString(baseArr)); // [1, 2, 3, 4, 5]

 

 

두 방법의 출력 방식이 다르다

for문은 1 2 3 4 5 하나씩 값이 찍히고

Arrays.toString()은 하나의 배열로 배열 자체 전체 값이 찍힌다

필요한 데이터 형태에 따라 골라쓰면 될 듯 하다

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

 

분기문

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

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

 

1.for문

반복횟수가 보통 명확할 때 사용

 

ex)사용 예제

Math.random() :

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

임의의 0~1의 더블값을 반환

int random = (int)(Math.random() * 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);

 

 

2.while문

for문 while문 서로 변환가능

형태

while(조건식) { // true/false로 출력
		수행문장;
}

반복횟수가 보통 불명확할 때 사용

int i = 1;
whiel(i<=10) {
		System.out.println(i+"출력");
			i++;// 반복문 인덱스 넘버  +1씩
} // 1 2 3 4 5 6 7 8 9 10

 

3.do while문

형태

do {
		반복 실행할 문장
}whlie(조건식);

do ~ while문은 for문이나 while문과 다른점

true이든 false이든 상관없이 중괄호{ } 안의 문장을

무조건 한번 실행시킨 후 조건을 검사하여 반복을 결정

 

조건식을 나중에 확인하기에 무조건 1번이상 문장을 실행하게됨

메뉴 코드에서 많이 사용

 

몇번 사용할지 알 수 없는 상황에서는 while문 사용이 보편적

 

return

return;

나(메소드-메인메소드)를 호출한 쪽으로 돌아가는 역할

결과값 반환 and 메소드 끝내는 역할

case 9 : System.out.println("프로그램 종료"); return;
// 이 리턴은 값을 안가지고 돌아가는 리턴

 

return 종류

1)값 가지고 돌아가는 return

2)값 없이 돌아가는 return

 

 

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