재_패캠Java/Spring - 2주차

하파타카·2023년 7월 19일
0

패캠JAVA, Spring과정

목록 보기
13/20

자바 기초 다지기 #2

클래스와 자료형

사용자 정의 자료형이 필요한 이유?

기본 자료형에는 한계가 있으므로 원하는 객체를 저장할 수 있는 사용자정의 자료형이 필요하다.
→ 이러한 자료형을 만들기 위해 사용하는 것이 클래스(Class)이다.

예시 설명
예시로 영화예매 프로그램을 만드려면 영화(제목, 개봉일, 감독, 주인공, 장르, 등급 등)라는 객체 데이터변수에 저장해야 하는데 변수를 선언하려면 자료형이 필요하다.
하지만 기본 자료형에는 영화라는 자료형이 없다.
결국 영화를 저장하기 위해 사용자정의 자료형을 만들어야 하고 사용자정의 자료형을 만들기 위해서 클래스가 필요한 것.
영화에는 제목, 개봉일, 감독, 출연배우, 장르, 등급 등 다양한 정보가 필요하므로 하나의 변수로는 영화라는 데이터를 표현할 수 없다.
대안으로 제목, 개봉일, 감독 등의 데이터를 각각의 변수에 저장하는것은 가능하지만 이때 영화 데이터를 이동해야 할 경우 매우 번거로워진다. (6가지 데이터를 모두 이동해야 하나의 영화데이터를 이동할 수 있게됨.)
이것을 한번에 할 수 있도록 영화라는 객체를 만들어야하고 그때 클래스를 사용한다.

객체지향 프로그래밍이란?

  • 객체(클래스, class)단위로 프로그래밍 하는 것.
  • 새로운 자료형이 필요할 때 언제든지 개발자가 자료형을 만들어 사용할 수 있는 프로그래밍 방법.

객체의 특징

  • 서로 다른 구성요소(이질적인 구조)로 이루어져 있다.

기본 자료형의 선언과 사용자지정 자료형 선언의 차이

int a;
Book b;

public class Book {
	public String title;
    public int price;
    public String company;
    public String author;
    public int page;
    public int isbn;
    ...
}

'단일' 공간을 사용하는 기본 자료형과는 달리 하나의 '구조' 모양을 띈다.
위의 Book클래스의 구성요소인 title, price등은 클래스의 속성(혹은 멤버변수,프로퍼티 라고도 함)이 된다.
또한 Book클래스로 찍어낸 b는 변수가 된다.
이러한 방식으로 새로운 자료형을 가진 변수를 만드는 것.

'찍어낸다'는 표현은 많은 자바책에서 클래스를 설명할때 비유되는 붕어빵과 붕어빵틀에서 가져왔다.

클래스(Class)란?
새로운 자료형을 설계(모델링)하는 도구.

객체 생성하기

객체로 새로운 자료형을 만들었다면 이제는 변수에 저장해야 한다.
하나의 변수에는 하나의 데이터만을 담을 수 있다.
기본 데이터형은 단일 데이터만 담으면 해결되지만 클래스는 만들었다 해도 생성하는 과정을 통해 실체를 가지지 않으면 변수에 담을(저장할) 수 없다.
이때 객체를 생성하는 과정을 거치면 객체자체는 단일데이터처럼 취급되므로 변수선언한 후 생성객체연결(저장)시키는 형태를 띈다.

즉, 변수에 실체가 없는 객체를 그냥 저장할 수는 없으므로

1) 변수를 선언하고(Stack메모리에 변수공간 할당받기) Book b;
2) 객체를 생성하고(실체를 만들어 Heap메모리에 공간을 할당받고) new Book();
3) 생성된 객체를 연결(저장)한다. b = new Book();

→ 여기서 new는 객체를 만들(생성할)때 사용하는 연산자이며, Book()생성자 메서드라고 한다.

사용법

// 객체 생성하기
클래스명 변수명 = new 생성자();
Book book = new Book();

위의 book은 기본자료형으로 선언한 변수와는 달리 인스턴스 변수(참조변수)로, 직접 데이터를 담는것이 아니라 객체가 저장되어있는 주소를 참조하는 변수이다.

=> Book()생성자로 만든 객체를 Heap메모리에 넣은 후 그 주소를 Book타입의 인스턴스변수 book에 저장한 것.

객체의 속성에 접근하기

생성한 객체의 속성에 접근하려면 참조연산자.를 이용한다.

예제
- BookExam.java -

public class BookExam {
    public static void main(String[] args) {
        // Q. [정수] 1개를 저장할 [변수를 선언]하시오.
        int a;

        // Q. 한 권의 책 데이터를 저장하기 위해 객체를 생성하시오.(인스턴스를 생성하시오)
        Book b = new Book();

        b.title = "자바";
        b.price = 30000;
        b.company = "패캠";
        b.author = "박매일";
        b.page = 650;
        b.isbn = "123123123";
        System.out.println(b.title+"\t"+b.price+"\t"+b.price+"\t"+b.author+"\t"+b.page+"\t"+b.isbn);
    }
}

- Book.java -

public class Book {
    String title;
    int price;
    String company;
    String author;
    int page;
    String isbn;
}

1) 변수
2) 자료형
3) 할당
이 자바의 핵심 3대 요소임을 잊지말자.


-학습정리 & quiz-
1. 클래스(class)
2. Book b;
3. new, 생성자 메서드
4. 속성, 멤버변수, 프로퍼티
5. .

  1. Movie m = new Movie();

배열

배열이란?

배열이란 동일한 자료형을 묶어 저장하는 참조 자료형(사용자정의 자료형)이다.
배열은 java에서 제공하는 참조 자료형으로, 새로운 자료형을 만들어주는 과정이 필요없다.

자료형은 기본 자료형과 사용자정의 자료형(참조 자료형)이 존재하는데 이때 사용자정의 자료형에는 배열, 클래스, 인터페이스 등이 있다.

참고로 클래스는 배열이 아니다.
배열은 동일한 자료형을 묶어 저장한 것이지만 클래스는 서로 다른 구성요소(이질적인 구조)로 이루어져있기 때문.

데이터를 연속적인 배열로 만들면 데이터를 이동하기 편하다.

자료형 변수와 배열자료형의 차이

-자료형 변수-
int : 정수 한 개
int a;
Book : 책 한 권
Book book;
String : 문자열 한 개
String str;
=> 정수, 책, 문자열 한 개를 저장하는 자료형이다.

-배열 자료형-
int[] : 정수 여러 개
int[] a;
Book[] : 책 여러 권
Book[] book;
String[] : 문자열 여러 개
String[] str;
=> 정수, 책, 문자열 여러 개를 저장하는 자료형이다.

배열은 하나의 덩어리이므로 java에서는 배열을 하나의 객체(Object)로 간주한다.

사용법

1) 배열 선언하기

자료형[] 변수명
자료형 변수명[]
int[] a;
String b[];

배열을 다른 자료형과는 달리 Array a;처럼 선언할 수 없는 이유는 배열은 동일한 자료형만 묶을 수 있는데 Array a;처럼 선언할 경우 이 배열이 어떤 자료형인지 알 수 없기 때문.

2) Heap 메모리에 배열의 객체 생성하기

new 자료형[배열의 길이];
new int[3];

3) 배열 자료형 변수에 객체 대입하기

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

초기화 란?
배열을 생성하는 동시에 값을 저장하는 것.
int[] a = {1, 2, 3, 4, 5};
선언만 하고 직접 초기화를 하지 않으면 컴파일러가 값을 강제로 초기화하여 각 자료형의 기본값이 들어있게 된다.
=> Heap메모리의 모든 값은 강제로 초기화됨.

참고로 초기화는 2행에 걸쳐 할 수도 있는데

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

위와같이 2행에 걸쳐 초기화를 할 경우 값을 넣을 때 new키워드로 새로 생성하는 과정이 필요하다.
되도록 한 행 내에서 초기화를 하는 이유가 이것.

참고로 Heap메모리는 비어있는 값을 가질 수 없다.
Heap메모리의 모든 값이 강제로 초기화 되는 이유는 비어있는 값을 가질 수 없기때문.

  • 기본 자료형과 참조 자료형의 기본값
구분자료형기본값
기본 자료형booleanfalse
기본 자료형정수(byte, short0
기본 자료형실수(float, double)0.0
기본 자료형char'\n0000'
참조 자료형클래스, 배열 등null

단, 기본 자료형 지역변수의 경우 Heap메모리가 아닌 Stack메모리에 데이터가 직접 저장되기 때문에 초기화 없이는 출력이 불가능하다. (출력 시 오류발생.)

예제

// char[] 배열에 APPLE이라는 문자를 저장한 후 이를 소문자 apple로 출력하시오.
char[] c = {'A', 'P', 'P', 'L', 'E'};

for (int i=0; i<c.length; i++){
    System.out.print((char)(c[i]+32));
}
// 결과: apple

객체배열

기본적인 사용법은 기본배열과 동일하지만 자료형이 기본자료형이 아닌 배열.

Book[] b = new Book[3];

이때 객체배열 내 객체 하나하나를 생성하여 사용하여야 함.
생성하지 않을 경우 아직 Heap메모리에 공간이 만들어지지 않은 것이므로 실체가 없는 상태임.

예제
Book.java클래스는 포스트 위쪽의 클래스를 그대로 사용함.

Book[] b = new Book[3];
b[0]= new Book();
b[0].title="첫번째 책";
b[0].price=30000;
b[1]= new Book();
b[1].title="두번째 책";
b[1].price=20000;
b[2]= new Book();
b[2].title="세번째 책";
b[2].price=16000;

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

2차원 배열

  • 행과 열이 있는 테이블모양의 배열.
  • 첫자리는 행, 둘째자리는 열을 의미한다.
  • 영상처리에서 이미지를 처리할 때 주로 사용된다.

사용상황 예시: '3명의 학생'의 '3개 과목 성적(국.영.수)'을 처리해야 하는 경우.

자료형[][] 변수명
자료형 변수명 [][]
자료형[] 변수명[]
int[] score = new int[3][3];

→ 일관성을 고려하여 자료형[][] 변수명 의 형태를 권장.
자료형[][] 변수명 = new 자료형[i][j]로 자주 표현됨.

// 예시
int[][] a = new int[3][4];

// 알아둬야 할 중요 속성
a.length = 2
a[0].length = 4
a[1].length = 4
구분0123
0a[0][0]a[0][1]a[0][2]a[0][3]
1a[1][0]a[1][1]a[1][2]a[1][3]
2a[2][0]a[2][1]a[2][2]a[2][3]

=> 그림은 표 형태로 그렸지만 실제로는 아파트처럼 이해하는게 핸들링하기에 좋다.
위 예제를 기준으로 a아파트의 3개 동, 4층짜리 건물이 된다.

Java는 row단위로 메모리를 할당받으므로 a[0]은 첫 행 전체를, a는 배열 전체를 의미한다.

2차원 배열의 초기화

배열을 생성하는 동시에 값을 저장한다는 초기화의 개념이 그대로 적용됨.
행 단위로 초기화함에 유의.

int[][] a = {
			 {1,2,3,4}, 
			 {5,6,7,8}
            };

서로 다른 열을 가진 가변길이 배열

다차원 배열을 이용하여 각 행마다 열의 갯수가 다른 배열을 만들 수 있다.

int[][] b = new int[4][];
b[0] = new int[1];
b[1] = new int[2];
b[2] = new int[3];
b[3] = new int[4];
구분0123
0b[0][0]
1b[1][0]b[1][1]
2b[2][0]b[2][1]b[2][2]
3b[3][0]b[3][1]b[3][2]a[3][3]

참고_위의 표에서 값이 빈 부분은 공간이 생성되지 않았다는 의미임.

예제

// Q1. 2차원 배열의 초기화(행 단위로 초기화)와 반복문을 활용한 원소 접근
int[][] a = {{1, 2, 3, 4}, {5, 6, 7, 8}};

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

// Q2. 행마다 열의 갯수가 다른 이차원 배열
int[][] b = new int[4][];
b[0] = new int[1];
b[1] = new int[2];
b[2] = new int[3];
b[3] = new int[4];

for (int i = 0; i < b.length; i++) {
    for (int j = 0; j < b[i].length; j++) {
        b[i][j] = '*';
        System.out.print((char)b[i][j]);
    }
    System.out.println();
}


-학습정리 & quiz-
1. 배열(Array)
2. 배열명.length;
3. float[][] f = new float[3][4];
4. x.length = 3, x[0].length = 5
5. 8
6. 객체 배열(Object Array)


연산자 학습 전 사용자에게 키보드로 데이터를 입력받는 방법 알아두기

Java에서 제공해주는 scanner api를 이용하여 scanner객체를 생성하어 사용한다.
api의 위치는 java.util.Scanner

Scanner scan = new Scanner(System.in);
scan.nextLine();	// 버퍼 비우기

int num = scan.nextInt();	// 정수입력
float num = scan.nextFloat();	// 실수입력
double num = scan.nextDouble();	// 실수입력
String str = scan.next();	// 문자열입력(공백 앞까지 입력 받음)
String str = scan.nextLine();	// 문자열입력(엔터 앞까지 입력 받음)

scan.close();	// 버퍼(스트림) 닫기

scan.close();는 버퍼의 사용이 끝났을때 스트림과의 연결을 끊는 역할을 한다.

예제

Scanner scan = new Scanner(System.in);

System.out.println("문자열을 입력하고 엔터를 입력하세요.");
String str = scan.nextLine();	// 여기서 프로그램이 입력을 받기 위해 한 번 멈추게 됨
System.out.println("str = " + str);

scan.close();

키보드 장치 ←(연결통로 api)→ Java

연결통로 역할을 하는 api를 Java에서는 스트림(Stream)이라고 함.

스트림에는 1.입력스트림, 2.출력스트림이 존재한다.

  • System.in: 키보드 장치와 연결하여 InputStraeam(입력스트림)이라는 클래스를 만드는 역할을 한다.
  • Scanner: InputStraeam의 데이터를 읽는 역할.

이때 입/출력 스트림은 java.io에 존재함.

버퍼 지우기

데이터가 버퍼에 남아있을 때 다시 키보드로 입력받은 값을 받아야 할 경우 버퍼에 남아있던값이 자동으로 사용될 수 있다.
자세한건 아래의 예제로 설명함.

Scanner scan = new Scanner(System.in);
System.out.print("문자열을 입력하고 엔터를 입력하세요 : ");
String str1 = scan.next();
System.out.println("str = " + str1);

System.out.print("문자열을 입력하고 엔터를 입력하세요 : ");
String str2 = scan.next();
System.out.println("str = " + str2);


첫번째 입력에서 hello world라고 입력했을때 str1에는 공백문자 직전인 hello까지만 들어가고 나머지 문자열 world는 버퍼에 그대로 남게된다.
이때 입력버퍼를 이용해 str2에 값을 넣으려 한다면 새롭게 키보드로 입력받지 않고 버퍼에 남아있던 world를 가져와 바로 str2에 넣어버리는 문제가 생긴다.

=> 버퍼에 데이터가 남아 예상치 못한 경우를 예방하기 위해 버퍼에 남은 데이터를 지우는 작업이 필요한 것.
버퍼(스트림)를 지우려면 scan.nextLine();을 추가하면 된다.

예제

// 도서정보 입력밥기
Scanner scan = new Scanner(System.in);
Book book = new Book();

System.out.print("첵 제목 : ");
book.title = scan.nextLine();
System.out.println(book.title);

System.out.print("가격 : ");
book.price = scan.nextInt();
System.out.println(book.price);

System.out.print("출판사 : ");
book.company = scan.nextLine();
System.out.println(book.company);

scan.nextLine();

System.out.print("저자 : ");
book.author = scan.nextLine();
System.out.println(book.author);

System.out.print("페이지수 : ");
book.page = scan.nextInt();
System.out.println(book.page);

scan.nextLine();

System.out.print("ISBN : ");
book.isbn = scan.nextLine();
System.out.println(book.isbn);

scan.close();   // 입력버퍼 닫기


연산자

연산자에는 단항 연산자, 이항 연산자, 삼항 연산자가 존재한다.
이란 연산자를 제외한 연산의 대상(숫자 등).

산술, 대입 연산자

산술 연산자

+ = * /(몫) %(나머지)

자료형에 따라서 결과가 다를 수 있음에 유의.

예제

// 홀짝 구하기
int su = 5;
if(su % 2 == 0){
    System.out.println("짝수");
} else {
    System.out.println("홀수");
}
// 결과: 홀수

// 각 자리의 숫자 총합
int num = 2579;
System.out.println( ((num/1000))%10 +
                    ((num/100)%10) +
                    ((num/10)%10) +
                    ((num)%10)
                    );
// 2+5+7+9 = 23

복합 대입 연산자

+= -= *= /= %=
변수 = 수식

예시: a += b => a = a + b

증가, 감소, 삼항 연산자

증감연산자

증감연산자의 위치해석
전위++aa 의 값 +1 → a 사용
전위--aa 의 값 -1 → a 사용
후위a++a 사용 → a의 값 +1
후위a--a 사용 → a의 값 -1

변수의 값을 먼저 사용한 후 증감이 이뤄지는지, 사용한 후 증감이 이뤄지는지의 차이이다.

예제

int x = 10;
System.out.println("--x = " + --x);
System.out.println("x++ = " + x++);
System.out.println("x-- = " + x--);
System.out.println("++x = " + ++x);
System.out.println("x = " + x);

삼항 연산자

(true or false) ? true일때 연산 결과 : false일때 연산 결과
(조건식) ? A : B

if문을 한 행으로 간단히 표현했다고 생각하면 됨.

예제

int x = 10;
int y = 20;
int min, max;
min = (x < y) ? x : y;
System.out.println("min = " + min);
max = (x > y) ? x : y;
System.out.println("max = " + max);

관계, 논리 연산자

관계 연산자

== != < <= > >= instanceof

관계 연산자해석
a == ba의 값이 b와 같은가?
a != ba와 b의 값이 다른가?
a < ba가 b보다 작은가?
a <= ba가 b보다 작거나 같은가?
a > ba가 b보다 큰가?
a >= ba가 b보다 크거나 같은가?

=> 관계 연산자의 결과값은 true, false 중 하나만 나올 수 있다.

instanceof: 객체가 상속관계인지 확인하는 연산자. 추후 객체지향 파트에서 자세히 후술함.

논리 연산자

논리 연산자의미해석
!a논리부정(not연산)a가 true이면 false, false이면 true
a && b논리곱(and연산)a, b 둘 다 true이면 true, 그 외는 false
a b논리합(or연산)a, b 둘 중 하나라도 true이면 true, 그 외는 false

=> 맨 마지막행의 논리 연산자는 a || b 임.
마크다운 문법상 표에 표기하지 못했음.

예제

int x=1, y=0;
System.out.println(!(x>0));	// false
System.out.println(x>0 && y<3);	// true
System.out.println(x>0 && y<0);	// false
System.out.println(x>0 || y<=0);	// true
System.out.println(y>0 && y<-5);	// false

int a = 3, b = 5;
System.out.println(a>=3 && b<6);	// true
System.out.println((a!=3) && (a>=2));	// false
System.out.println((a!=3) || (a>=2));	// true

제어문과 제어자

조건문 if

1. 단순 if문

조건식이 true이면 중괄호 내부의 문장들이 실행된다.
false일 경우 if문의 내용을 건너뛰고 다음문장이 실행된다.

조건식이 한문장일 경우 중괄호 생략 가능.

if(조건식){
	문장1;
    문장2;
}

if(조건식)
	한문장;

→ 이때 조건식의 결과는 boolean타입(true, false)만 가능하다.

2. if-else문

조건식이 true이면 if의 중괄호 내부의 문장이, false이면 else의 중괄호 내부의 문장이 실행된다.
마찬가지로 조건식이 한문장일 경우 중괄호 생략 가능.

간단한 문장은 삼항 연산자로 변환할 수 있다.

if(조건식){
	문장1;
    문장2;
} else {
	문장3;
    문장4;
}

if(조건식)
	문장1;
else 
	문장2;

3. 다중 if-else문

상단에서부터 순차적으로 조건식을 검사하여 결과가 true인 블럭에 해당하는 문장이 실행된다.
else문은 맨 마지막에 위치하며 상위의 모든 조건이 false일 경우 실행된다.

가장 대표적인 예시는 학점구하기 예시.

if(조건식1){
	문장1;
    문장2;
} else if (조건식2){
	문장3;
    문장4;
} else {
	문장5;
    문장6;
}

if(조건식)
	문장1;
else if(조건식)
	문장2;
else 
	문장3;

예제

// 1. 단순 if문
// Q. x의 값이 0보다 큰 경우 "양수" 출력
int x = 10;
if (x > 0) {
    System.out.println("양수");
}

// 2. if-else문
// Q. 정수 1개를 입력받아 입력된 수가 7의 배수인지 출력하시오.
Scanner scan = new Scanner(System.in);
System.out.print("정수 1개를 입력하세요: ");
int a=scan.nextInt();

if (a % 7 == 0) {
    System.out.println(a+"는 7의 배수입니다.");
} else {
    System.out.println(a+"는 7의 배수가 아닙니다.");
}
System.out.println("종료.\n");

// Q. 년도를 입력받아 해당 년도가 윤년인지 판단하여 출력하시오.
// // 윤년계산법: 4의 배수이면서 100의 배수가 아닌 해 or 400의 배수인 해
System.out.print("윤년여부를 확인할 년도를 입력하세요: ");
int year = scan.nextInt();

if(((year%4==0) && (year%100!=0)) || (year%400 == 0)) {
    System.out.println(year +"년은 윤년입니다.");    
}else{
    System.out.println(year +"년은 윤년이 아닙니다.");
}
System.out.println("종료.\n");

// 3. 다중 if-else문
// Q. 입력받은 점수에 대한 학점을 구하시오. 90점 이상은 A, 85점 이상은 B, 80점 이상은 C, 75점 이상은 D, 그 이하는 F로 처리한다.
// 단, 점수는 0~100점 사이로 입력받는다.
System.out.print("점수를 입력하세요: ");
int jumsu = scan.nextInt();

if (jumsu>=0 && jumsu <=100){
    if (jumsu >= 90){
        System.out.println("A학점입니다.");
    } else if (jumsu >= 85){
        System.out.println("B학점입니다.");
    } else if (jumsu >= 80){
        System.out.println("C학점입니다.");
    } else if (jumsu >= 75){
        System.out.println("D학점입니다.");
    } else {
        System.out.println("F학점입니다.");
    }
} else {
    System.out.println("유효한 점수가 아닙니다.");
}
scan.close();

코드 가독성을 위해 if문의 줄바꿈을 늘 신경쓰는 습관을 들이자.

조건문(선택문) switch-case

수식의 값에 따라 특정 위치(case)로 이동하여 문장을 실행하는 조건문.
사용 영역이 if-else문에 비해 제한적.

switch(수식){
	case 상수1:
    	문장1;
        break;
	case 상수2:
    	문장2;
        break;
    ...
	default 상수1:
    	문장N;
}

default는 일치하는 case의 상수가 없을 경우 실행되는 문장으로, 생략해도 무관하다.

break 제어자를 빼먹으면 아래의 case에 해당하는 문장까지 계속 실행되므로 유의하자.
break를 만나는 순간 해당 switch문을 탈출한다.

예제

// Q. switch문을 이용하여 요잉에 해당하는 운동을 출력하시오.
Scanner scan = new Scanner(System.in);

System.out.print("요일을 입력하세요. 첫 문자는 대문자로 입력합니다. : ");
String day=scan.nextLine();

switch (day){
    case "Sunday":
        System.out.println("야구하기");
        break;
    case "Monday":
        System.out.println("농구하기");
        break;
    case "Tuesday":
    case "Wednesday":
        System.out.println("수영하기");
        break;
    case "Thurssday":
        System.out.println("축구하기");
        break;
    default:
        System.out.println("휴식");
}

반복문 for

  • 일반적으로 반복하는 횟수가 정해진 경우 사용.
  • 초기식, 조건식, 증감식으로 구성됨.
  • 초기식은 처음 한 번만 실행됨.
  • 조건이 true일 동안만 실행되며, false가 되는 순간 반복문을 탈출함.
  • 기본 for문 이외에 배열등의 컬렉션 객체에 사용하기 편리한 향상된 for문으로 foreach문이 존재함.
// for문
for(초기식; 조건식; 증감식){
	실행구문;	// 조건이 true인 동안만 실행
}

// foreach문
for(변수 : 컬렉션) {
	실행구문;
}

for문: 조건식실행구문증감식 이 반복적으로 수행됨.
foreach문: 컬렉션에서 하나의 데이터를 꺼내어 변수에 대입 → 실행구문 → 컬렉션에 남은 데이터가 없을때 탈출

예제

int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

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

System.out.println();

for (int num : numbers) {
    System.out.print(num + "\t");
}

반복문 while

  • 조건식을 먼저 검사한 후 실행구문으로 넘어가는 반복문.
  • 조건식이 false이면 반복문을 탈출함.
    => 처음부터 조건식을 만족하지 못하면 한 번도 실행되지 않을 수 있음.
  • for문과 달리 반복 횟수가 정해지지 않았을때 사용하기 좋음.
초기식;
while(조건식){
	실행 구문;
    증감식;
}

초기식조건식 검사 → 실행구문증감식

do-while문

while문과 같으나 첫 실행은 무조건 한 번 실행이 된다는 특징이 있다.

초기식;
do {
	실행구문;
    증감식;
} while(조건식);

초기식실행구문증감식조건식실행구문증감식조건식 ...
의 순서대로 실행됨.

예제

// while문
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int i = 0;
while (i<numbers.length){
    System.out.print(numbers[i] + " ");
    i++;
}
// 결과: 1 2 3 4 5 6 7 8 9 10 

System.out.println();

// do-while문
i = 1;
do {
    System.out.print(i + "\t");
    i++;
} while (i<=5);
// 결과: 1	2	3	4	5	

while문과 do-while문 모두 무한루프 반복문을 만드는 실수를 하지 않도록 유의하자.

제어자 break

현재 수행 중인 반복문을 중단하고 제어를 반복문 바깥으로 이동한다.

제어자 continue

현재 수행 중인 반복문에서 현재 조건 값에 대한 처리를 중단하고, 다음 조건 값에 대한 처리를 수행한다.

예제

// Q1. 배열의 값을 출력하되 'o'를 만나면 반복을 중지하시오.
char[] c = {'s','h','u','t','d','o','w','n'};

for (char cha: c) {
    if(cha == 'o')    break;
    System.out.print(cha+" ");
}
System.out.println();

// Q2. 1~10의 정수 중 3의 배수의 갯수를 구하여 출력하시오.
int cnt = 0;
for (int i =1; i<=10; i++) {
    if (i % 3 != 0)     continue;
        cnt++;
}
System.out.println("cnt = " + cnt);


-학습정리 & quiz-
1. %
2. 1) ? 2) :
3. a != b
4. && ||
5. a += 2
6. if(){}, if(){}else{}, if(){}else if{}else{}
7.

int sum = 0;
for(int i=1; i<=10; i++) {
	sum += i;
}
  1. break, continue


2주차 수강후기

밀렸다...바쁘다...

profile
천 리 길도 가나다라부터

0개의 댓글