[JAVA]_3일차

전희주·2023년 4월 7일
0

JAVA

목록 보기
3/24
post-thumbnail

ref

지난 강의 리뷰

    1. 조건문 :
    • if문

      • : " 만약(if) 조건식이 참(true)이면 괄호({}) 안의 문장들을 수행해라 "
      if (조건식) {
      // 조건식이 참일 경우 수행될 코드 작성}
    • if ~else 문

      if (조건식) {
      	// 조건식이 참(true)일 때 수행될 문장들을 적는다.
      } else {
      	// 조건식은 적을 필요가 없다.
      	// 조건식이 거짓(false)일 때 수행될 문장들을 적는다. : if 조건식 제외 나머지 경우
      }
    • 다중 if 문

      if (조건식1) {
      	// 조건식 1이 참일 때 수행될 문장들
      	if (조건식 2) {
      		// 조건식 1이 참이며 조건식 2도 참일 때 수행될 문장들
      	} else if (조건식 3) {
      		// 조건식 1이 참이지만 
            	// 조건식 2는 거짓이고 조건식 3은 참일 때 수행될 문장들
      	} else {
        		// 조건식 1이 참이지만 
            	// 조건식 2와 3은 거짓일 때 수행될 문장들
        	}
      } else {
      	// 조건식 1이 거짓(false)일 때 수행될 문장들을 적는다.
      }
    1. 반복문: for, while, do-while

switch문

  • ( if문과 달리 ) 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고,
    표현도 간결해서 알아보기 쉽다.
    ▶ 처리할 경우의 수가 많을 때 "적합" _ 단, 제약조건 ★주의★
  • 💫 내부적으로 동등 연산자 == 수행해 값을 비교
  • cf) if문의 조건문처럼 논리, 비교, instanceof 연산을 사용하지는 않음
switch (조건식) {
	case1 :
    		// 조건식의 결과가 [값1]과 같을 경우 수행
    		break // switch문 벗어나기
    case2 :
    		// 조건식의 결과가 [값2]와 같은 경우 수행
    		break
    ...
    ...
    default :
    	//조건식 결과와 일치하는 case 없을 경우 수행될 문자
        //...
}
  • break문은 옵션 (없으면 case문 순차적으로 모든 내용 실행)

  • 《계산 순서》

    • ① 1차적으로 switch문의 조건식

    • ②【결과와 일치하는 case문으로 이동】

    • ③ 이동한 case문 내부 문장 수행

    • ④【break문 / switch문 종류의 단계 도달】

    • ⑤종료

    • 위 순서 중 ②번 부분을 보면 switch문의 조건식 결과와 일치하는 case로 간다고 작성되어있는데
      만약 일치하는 case가 없을 경우, default문으로 이동한다.

  • switch문을 쓰기 위해서 지켜져야할 제약조건이 있다.

  • 💫《제약 조건》

    조건식의 결과값은 무조건 정수/문자열이어야 한다. ==> byte, short, int, char, string, enum (cf. long은 x)
    case문의 값 역시 상수 (정수/문자)/문자열만 사용하여야 한다. (변수나 실수 X)
    중복되지 않아야 한다.

package p03;

public class switch{

	public static void main(String[] args) {
		char b = 10; 
		switch(b) 
		{
		case 10 : 
			System.out.println("10"); // break문이 없는 경우 모든 case 문 실행
		case 20 : 
			System.out.println("20");
			break;
		case 30 : 
			System.out.println("30");
		default: 
			System.out.println("default");
		
		}
		
		switch (b) 
		{
		case 10 : 
			System.out.println("10"); 
			break;
		case 20 : 
			System.out.println("20");
			break;
		case 30 : 
			System.out.println("30");
			break;
		default: 
			System.out.println("default");
			break;
		}
		
		String s = "A";  
		switch (s) 
		{
		case "A" : 
			System.out.println("A"); 
			break;
		case "B": 
			System.out.println("B");
			break;
		case "C" : 
			System.out.println("C");
			break;
		default: 
			System.out.println("default");
			break;
		}
		
		// byte, short, int, char, String, enum 데이터형만 가능하다(long은 불가)
		// break 문은 옵션 
	}

}

반복문

ref. https://velog.io/@yummygyudon/JAVA-%EB%B0%98%EB%B3%B5%EB%AC%B8

  • 1) 조건이 일치하지 않을 때까지 특정 문장들 반복
  • 2) 3가지 요소
    • 시작값(초기값), 조건식, 증감연산자
      ==> 반복문 종류와 상관없이 반드시 존재해야 함
  • 3) 종류 - for문 :
    • for(시작값; 조건식; 증감식) { }
      ==> 반복 횟수 예측이 가능
    • while문: while(조건식) { }
    • do-while문

for문

  • for문 실행 순서
for (초기화 ; 조건식 ; 증감식) {
	// 조건식이 참(true)인 동안 수행될 문장들을 적는다. _ 조건식 부분이 Python 입문자였던 필자에게 꽤 신선했던 부분
}
// "Just Do It!" 5번 출력하기
for (int i = 1; i <= 5 ; i++) {
	System.out.println("Just Do IT!") ;
}
package exam01;

public class ForTest {

	public static void main(String[] args) {
		// hello 
		for(int i=1; i<=5; i++) 
		{
			System.out.println("hello");	
		}
		
		for(int i=10; i<=15; i++) 
		{
			System.out.println("world"+i);
		}
		
		for(int i=10; i>5; i--) 
		{
			System.out.println("happy"+i);
		}
		
		for(int i=1; i<=10; i+=2) 
		{
			System.out.println("aaaa"+i);
		}
		
		for(int i=1, j=1; i<=5 && j<=3; i++, j++) 
		{
			System.out.println("bbb"+i);
		}
		
		// 중첩 반복 
		for(int i=1; i<=5; i++) 
		{
			for(int i2=1; i2<=5; i2++) 
			{
				System.out.println("ccc"+i+"\t"+i2);
			}
		}

	}

}

+) 중단점 설정 후 디버깅 수행

while문

  • 반복 횟수 예측이 어려울 때 주로 사용 (무한루프)
  • for문과 공통적으로, 시작값(초기값), 조건식, 증감연산자 기재 필
  • while문 밖에 초기화 값 기재
// for문
for (int i = 1; i <= 10; i++) {
	...
}

// while문 
int i = 1 ; // while문 밖에서 초기화  
while (i <= 10) // 조건식{ 
	...
    i++; // 증감식 
}
package exam01;

public class WhileTest {

	public static void main(String[] args) {
		// for 
		
		for(int i=1; i<=5; i++) 
		{
			System.out.println("hello");	
		}
		
		// while
		int i = 1;
		while(i<=5)
		{
			System.out.println("world"+i);
			i++; 
		}
		
		
	}

}
package exam01;
import java.util.Scanner;
public class WhileTest2 {

	public static void main(String[] args) {
		
		// 무한루프: 반드시 반복문을 빠져나올 수 있는 방법을 제공해야 된다. 
		
		/*while(true) 
		{
			문장 
			if (조건) break; 
		}*/
		
		// 문자열 비교는 equals 메서드를 사용 
		
		// 반복적으로 키보드 입력 받기 
		while(true)
		{
		Scanner scan = new Scanner(System.in);
		System.out.println("이름 입력 : (종료:Q) ");
		String name = scan.next();   // int n = scan.nextInt();
		if(name.equals("Q"))
			break; 
		System.out.println("입력 이름" + name);  // 사용자가 입력한 값을 저장하고 출력
		}
		System.out.println("end"); 
	}
}




do-while문

  • 반복 여부를 결정할 조건식이 뒤에 위치하기 때문에 최소 한 번의 실행은 보장되어 있다.
    • cf. while문은 조건식이 false일 경우 한 번도 실행되지 않을 수 있다.
  • while (조건식) 이후에 ;(세미콜론)을 잊지 않도록 주의해야한다.
시작값; 
do {
	문장;
	증감연산자; 
	... // "처음 한 번"은 무조건 실행됨.
} while (조건식) ; // ';' 필수이니 꼭 기억해야한다.
package exam01;

public class DoWhileTest {

	public static void main(String[] args) {
	
		// while
		int i = 1;
		while(i<=5)
		{
			System.out.println("world"+i);
			i++; 
		}
		
		int i2 = 1;
		do
		{
			System.out.println("hello"+i2);
			i2++; 
			
		} while(i2>5);    
		
		
	}

}

break 문

  • 자신이 포함된 가장 가까운 반복문을 벗어나게 한다. (주로 조건문 if문과 함께 특정 조건 종료 명령에 쓰임 )
package exam01;
public class break_continue {

	public static void main(String[] args) {
		
		// 1~10까지 반복하는데 5까지 출력하고 중단하시오 
		for(int i = 1 ; i<= 10; i++)
		{
			if (i==6) break; 
			System.out.println(i);
		}
		
		System.out.println("END"); 
		
	}
}
Loop1 : for (int i=2; i <= 9 ; i++) {
	    for (int j=1; j <= 9 ; j++) {
       	        if (j==5)
                    break Loop1 ; -> 구구단 2*4까지만 출력하고 전체 Loop1 밖으로 이동
                    
                    //break ; ->구구단 *4까지
                    //continue Loop1 ; -> continue도 이름 활용 : 구구단 2단 *4까지만 출력하고 Loop1 '끝'으로 이동
                    //continue ; -> 구구단 *5만 빼고 반복
            	System.out.println(i + "*" + j + "=" + i*j );
            } 
            System.out.println();
	} //( continue Loop1 이 오는 지점)
/*---------------------------------< Loop1 지역 >----------------------------------*/
//( break Loop1 이 오는 지점)

continue 문

  • (반복문 내에서만 사용 O) 진행 중인던 반복을 끝내고 다음 반복으로 넘어가게 한다.
    (전체 반복 중 '특정 조건 만족 경우'를 제외할 때 쓰임 )
  • continue문은 반복문안에서 어떤 조건을 충족하였을때 수행문을 수행하지 않고 다시 조건을 검토하게 하는 기능을 합니다
package exam01;
public class break_continue {

	public static void main(String[] args) {
		
		// 1~10까지 반복하는데 5까지 출력하고 중단하시오 
		for(int i = 1 ; i<= 10; i++)
		{
			if (i==6) break; 
			System.out.println(i);
		}
		
		System.out.println("END"); 
		
		// continue 
		// 1~5 반복하는데 i가 3일 때는 C 출력하지 마시오 
		for (int i2=1;i2<=5;i2++)
		{
			System.out.println("A"+i2);
			System.out.println("B"+i2);
			
			if (i2 == 3)continue;
			System.out.println("C"+i2);
			
		}
		System.out.println("END"); 
		
	}
}




  • appendix
public class ContinueExample {

	public static void main(String[] args) {
		// 3의배수만 출력하자
		
		
		
		for(int i = 1; i < 100; i++) {
//		    if(i % 3 == 0) {
//		    	System.out.println(i);
//		    } // 도 같은 결과도출
//		}
			
			if(i %3 != 0) {
				continue;
			}
			System.out.println(i);
		}
  • coninue문을 활용하여 i가 3으로 나누어 떨어지지 않으면 수행문을 수행하지 않고 다음 반복으로 넘어가라는 조건을 추가하여 1~100까지의 숫자 중 3의 배수만 출력하는 반복문을 구현해 보았습니다.

  • break, continue 예제

    Q. 구구단을 출력할 때 짝수 단만 출력하면서 단보다 곱하는 수가 작거나 같을 때까지만 출력하세요

public class BreakContinue {

	public static void main(String[] args) {

		int dan;
		int count;
		
		for (dan = 2; dan <10; dan++) {
			
			if(dan % 2 != 0) {
				continue;
			}
			System.out.println(dan+"단");
			for(count = 1; count <10 ; count++) {
				
				if(count > dan) {
					break;
				}
				
				System.out.println(dan + "X" + count + " = " + dan*count);
			
			}
			
		System.out.println();
  • 외부 반복문에 continue문을 넣어 홀수단일 경우 수행문을 수행하지 않고 다시 조건을 검토하며 내부 반복문에서 곱하는 수가 단수 보다 높아지면 break를 통해 반복문을 빠져나오게 구현하였습니다.

  • 정리해보면 break;문과 continue문은 반복문을 더 세밀한 조건을 설정하여 구현하도록 돕는 역할을 할 수 있음을 알 수 있었습니다.

배열 (=> data 저장)

  • 1) 참조형: 클래스, 배열, 인터페이스
  • 2) 참조형은 반드시 객체 생성해야 한다.
    • 객체 생성은 new 키워드 사용
  • 3) 3가지 방법 가능

배열과 변수, 컬렉션의 비교

  • 공통점: data 저장
  • 차이점:

    배열: 여러 개의 data를 하나로 관리

    ==> 하나의 변수에 여러 개의 data 저장
    ==> 저장되는 data들의 자료형은 동일
    (숫자면 숫자, 문자면 문자 ==> 혼용 불가)
    ==> 한 번 배열 선언시, 크기 변경 불가
    (추가, 삽입, 삭제 불가)
    • 배열이란 자료형의 종류가 아닌 자료형의 집합을 의미
    • 형식:
      자료형 [ ] 변수명;
      자료형 변수명 [];
      • int n; // n은 기본형 변수 ==> 이 대입됨
      • int [] n2; // n2는 참조형 변수 ==> 주소 값이 대입됨
  • 1) 배열 생성

  • int 타입 배열 선언

    • int[] i_array;
    • int i_array[];
  • 2) 배열 생성 후 초기화하면 배열의 주소가 할당된다.
    - 타입[] 변수이름 = new 타입[길이];
    // 배열의 선언과 생성을 동시에
    - int[] score = new int[5];
    // 길이가 5인 int 배열
    - int[] i_array = new int[8]; //초기값 0
    - String[] s_array = new String[8]; //초기값 ""

  • 3) 배열 초기화

    • 배열 선언만 해놓고 나중에 초기화를 시킬수도 있다.
      int[] i_array;
      i_array = new array[8];
  • 배열을 선언하면 크기를 할당하면 아래와 같은 배열의 index가 부여

  • 배열 자동 초기화

    :

    • 배열은 원래 생성과 동시에 자동으로 자신의 타입에 해당하는 기본값으로 초기화
      정수:0
      실수: 0.0
      논리: false
      참조형 클래스: null
    • 따로 초기화하지 않아도 되지만, 원하는 값을 저장하고 싶다면 값을 지정해야 한다.
  • 배열의 크기:
    '배열이름.length'
    int[] arr = new int[5];
    // 길이가 5인 int배열
    int tmp = arr.length;
    // arr.length의 값은 5이고 tmp에 5가 저장된다

  • 배열 요약

    • 가) 배열 선언
      데이터타입(기본형, 자료형) [ ] 배열명;

    • 나) 배열 생성
      배열명 = new 데이터타입 [크기] ;

    • 다) 배열 초기화
      n[0] = 10;
      n[1] = 10;
      n[2] = 10;


      n2[0] = "A" // 문자 A의 주소값이 저장
      n2[1] = "B"

ArrayTest

package exam02;

public class ArrayTest {

	public static void main(String[] args) {
		
		// 1. new 이용 
		
		// 1) 기본형 배열 
		
		int n [] = new int [3]; // 자동 초기화 int => 0 
		n[0] = 10; 
		n[1] = 20; 
		n[2] = 30;
		 
		System.out.println(n[0]);
		System.out.println(n[1]);
		System.out.println(n[2]);

		// for문을 이용해서 배열값 출력 
		// "인덱스(index)의 범위는 0부터 '배열길이 -1'까지."
		// 없는 배열 요소 접근 시 ArrrayIndexoutOfBoundsException 예외 발생 
		for(int idx = 0; idx <n.length; idx ++) {
			System.out.println(n[idx]);
		}
		
		// 향상된 for문 (foreach 문)
		/*
		 * for (변수: 배열명)
		 * { // 배열에 저장된 값을 얻고 변수에 저장, 이것을 배열 크기만큼 반복 
		 * }
		 * 
		 * */
		for(int x : n) // 만약 배열 원소들이 문자열일 경우 for each 문 내 변수를 string으로 지정 
		{
			System.out.print(x + " ");
		}
	}

}

ArrayTest2

package exam02;

public class ArrayTest2 {

	public static void main(String[] args) {
		
		// 1. new 이용 
		
		// 2) 참조형 배열 
		String [] names = new String[3]; 
		
		// 향상된 for문 (foreach 문)
		/*
		 * for (변수: 배열명)
		 * { // 배열에 저장된 값을 얻고 변수에 저장, 이것을 배열 크기만큼 반복 
		 * }
		 * 
		 * */
		names[0] = "홍길동"; 
		names[1] = "이순신"; 
		names[2] = "유관순";
		
		for (String s : names)
		{
			System.out.println(s);
		}
	}
}

ArrayTest3

  • 메서드 안에 선언하면 로컬 변수 ==> main이든, 특정 함수의 중괄호 블럭 안 ==> stack 영역 할당
  • new로 객체 생성하면 무조건 heap 영역에 할당

+) main 종료시 Garbage Collector

  • 가비지 컬렉션은 영어로 Garbeage Collection으로 줄여서 GC라고도 부릅니다. 가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 말합니다.
package exam02;

public class ArrayTest3 {

	public static void main(String[] args) {
		
		// 기본형 변수
		int n = 10; 
		
		// 메서드 안에 선언하면 로컬 변수 ==> main이든, 특정 함수의 중괄호 블럭 안 ==> stack 영역 할당 
		
		// 참조형 변수
		// 1)기본형 배열
		//  new로 객체 생성하면 무조건 heap 영역에 할당 
		int [] x = new int [3]; 
		x[0] = 10; 
		
		//2) 참조형 배열
		String [] y = new String[3]; 
		y[0] = "홍길동"; // 문자열의 주소값이 heap영역에 할당됨
	
	}
}

배열 생성 3가지 방법

new 이용
배열의 선언과 생성
int [ ] n = new int [3] ;
String [ ] n = new string [3] ;
가) 변수 선언 (배열 선언)
나) 배열 생성
다) 배열 초기화

2) 리터럴 (데이터 값) 이용
배열의 선언과 초기화
int [] n ={10, 20, 30};
String [ ] n = {“A”, “B”, “C”};

=> 주의) 한 줄에 명시해야 함

3) New + literal
Int [ ] n = new int [ ] {10, 20};
String [ ] n2;
n2 = new String {“A”, “B”};

=> 주의) 절대로 배열 크기를 지정해주면 안됨

main 메서드의 String [] 파라미터 사용 용도

 class Test {
 	main(String[] args) {
 		}
}

javac Test.java

일반 변수: data 하나만 저장

==> data 개수만큼 변수 선언 필, 관리가 불편함.

컬렉션

==> 하나의 변수에 여러 개의 data 저장
==> 저장되는 data들의 자료형 여러 개 혼용
(숫자, 문자 ==> 혼용 가능)
==> 크기 변경 가능
(추가, 삽입, 삭제 가능)
==> set, list, map 계열 존재

array 클래스

클래스

0개의 댓글