[4기] 백엔드 개발자 부트캠프 "오르미" ~ing/[4기] 백엔드 개발자 부트캠프 오르미 수업 복습

[4기] 29일차 Java ( 반복문(for, while 문),class란? )

sohee99 2024. 1. 30. 18:29

오늘의 학습 반복문 - (for, while 문), class에 대해서!

 

 

for 문 

 

for 문은 반복적으로 수행할 때 사용한다.

 

public static void main(String[] args) {
 //1~5까지 출력
 System.out.println(1);
 System.out.println(2);
 System.out.println(3);
 System.out.println(4);
 System.out.println(5);

 

이렇게 반복적으로 사용할 때 이렇게 똑같은 출력 코드를 입력하는것이 아닌, for으로 해결!

 

  for (int i = 1; i <= 5; i++) { //0,1,2,3,4,5
  System.out.println(i);
  }
}

 

 

이렇게 for을 이용하여 int i = 1 초기화 하고, 조건식인 i <= 5 , 증감식 i ++로 구성한다.

 

그럼, for의 진행순서는? 

출처 - 이스트소프트 조성연

 

초기화를 진행하고 조건식에 따라 실행하며 다시 증감식으로 가 +1 올라가서 다시 조건식으로 가 false  

즉, 조건식의 조건이 맞지 않을 때 까지 반복한다.

 

Q.for 문 실습 1~10까지 출력값 나오게 하시오.

    public static void main(String[] args) {
            for(int i =1; i < 11; i++){
                System.out.println(i);
        }
    }

 

- i를 1로 초기화하고 i 가 11보다 작을 때 출력한다. i 는 1씩 증가하는 증감식이다. 

 

 

조건식으로 1이 true이므로 출력되고 증감 +1 이므로 2가 다시 조건식으로 들어가고 다시 출력되고 다시 증감하고 

이렇게 10까지 반복하다가 11에서 출력되지 않고 멈추는 식이다!

 

 

그럼 for문을 사용하여 배열의 내용을 출력하는 코드도 배웠는데요!@

 

 

public static void main(String[] args) {
    //[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    int[] arr = {89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99};
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

 

[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

 

이 배열값을 출력하고 싶으면? 

 

초기값 0, i가 arr.length (배열의 길이를 의미한다) +1씩 증가하면서 배열내부에 있는 값을 출력한다.

 

 

for each문

 

for each 문은 for문의 살짝 변형한 것이다! 

 

public static void main(String[] args) {
    int[] array = {89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99};
    for(int arr : array){
        System.out.println(arr);
    }

 

for ( 자료형 변수형: iterate ) {} 구조로 변형되었다!

 

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

 

확실히 for (int i = 0; i < arr.length; i++) 이것보단 깔끔한 느낌이다!!! ㅎㅎㅎㅎ 

 

 

for으로 돌아가는 continue

 

public static void main(String[] args) {
        int[] marks = {90, 25, 67, 45, 80};

        for (int i = 0; i < marks.length; i++) {
            if (marks[i] < 70) {
                continue;
            }
            System.out.println((i + 1) + "번 학생, 축하합니다 합격입니다!");
        }
 }

 

 

자바스크립트와 동일하게 블록을 수행하는 도중 continue를 만나면 다음문장 수행하지 않고

다시 for의 처음으로 돌아간다.

 

 

위 와 같이 if문과 결합하여 사용하면,

 

만약 점수가 50점 아래라면 continue로 다시 for문의 처음으로 돌아가 인덱스 +1 이증감하고 

다시 if 문으로와 조건식 hi 

 

또 점수가 50 아래라면? 다시 continue 70점이라면? if의 조건이 false이므로 출력되게된다!

 

 

이렇게 조건에 맞지 않는 숫자를 출력하지 않고 처음으로 돌아가게 하는것이 continue!

 

 

이중 for문

 

for문안에 for문을 의미한다. 

 

중첩 for문에 대해 제한은 없지만 성능상 보통 이중 for문까지 사용하며 3중 for문은 실무에서 거의 사용하지 않는다.

 

public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {  // i = 0, 1, 2
        for (int j = 0; j < 4; j++) {  // j = 0, 1, 2, 3
            System.out.println("i = " + i + ", j = " + j);
        }
    }
}

 

 

이렇게 for문안에 for문이 들어있는것이 이중 for문!

 

처음 for조건을 만족할때까지 내부에 있는 for을 실행하면서 내부에 있는 for을 만족할 때 출력된다!

 

처음 for 조건 만족 + 내부 for문 만족이 충족되면서 나오겠지요오

 

i 가 0일때 j는 0,1,2,3 이 나오는 식!!!

 

이렇게 i = 0,1,2,3 j = 0,1,2,3 이 나오는거면 딱 떠오르는것은! 

 

구구단!!!!!!!!!!!!!!!!!!!!!!

 

예시로 구구단을 만들어보자!!!

 

Q. 구구단 2단부터 9단까지 만들어보자!
    public static void main(String[] args) {
        for(int i = 2; i < 10; i++){
            for (int j = 1; j < 10; j++){
                System.out.println(i + "*" + j + "=" + (i*j));
            }
        }
    }

 

for문 i의 초기화를 2로 잡아주고 10 보다 작을 때 내부 블록실행 >

for j는 1로 초기화 j가 10보다 작을 때 내부 블록실행 >

i * j 값이 출력된다. 

 

이렇게 2~9 의 i 와 2~9의 j가 출력되면서 구구단 완성!!!!!!!!!! ㅎㅎㅎ

 

구구단 만들기 쉽구마잉 ㅎㅎㅎ

 

 

 

while 문

 

for문은 정해진 횟수 만큼 반복이라면?

 

while문은 true일때까지 계속 반복!!!!! 

 

 

public static void main(String[] args) {
    int index = 1;
    while (index <= 5 ){
        System.out.println(index);
        index++;
    }
}

 

이렇게 while 문은 초기화를 먼저해주고 작성합니당 

 

조건식 입력하고! 조건이 true 일경우 계속 반복합니다!

 

( + 흠 근데 for문이랑 그럼 똑같지만 다른 방법인건가? ㅋㅋㅋㅋㅋ for문이 사용감은 더 좋네용 ㅎ )

 

 

public static void main(String[] args) {
    int treeHit = 0;
    while (treeHit < 10) {
        treeHit++;  // treeHit += 1 로도 표현 가능
        System.out.println("나무를  " + treeHit + "번 찍었습니다.");
        if (treeHit == 10) {
            System.out.println("나무 넘어갑니다.");
        }
    }
}

 

예시로 하나 작성하면, 

 

초기화 먼저 treeHit로 해주고!

 

treeHit가 10보다 작을 동안 나무를 1번찍었습니다 2번찍었습니다 출력되겠죵?

 

여기서 만약 10과 같다면 나무넘어갑니다.라고 출력됩니다! 

 

증감식은 while 블록내부에 작성 ㅎㅎ

 

 

while 문 빠져나가자 - break

 

조건이 참일 동안 while 문은 계속 반복해서 수행할텐데 어떻게 강제로 멈춰야하나? 싶을땐 

 

자바스크립트때 배운 break또 보구나 ㅎㅎ break문을 사용한다.

 

예시 코드를 작성하면, 

 

public static void main(String[] args) {
    int coffee = 10;
    int money = 300;

    while (money > 0) {
        System.out.println("돈을 받았으니 커피를 줍니다.");
        coffee--;
        System.out.println("남은 커피의 양은 " + coffee + "입니다.");
        if (coffee == 0) {
            System.out.println("커피가 다 떨어졌습니다. 판매를 중지합니다.");
            break;
        }
    }
}

 

커피 초기값 10 머뉘 초기값 300 

 

머니가 0보다 클 경우 돈을 받았으니 커피를 줍니다. 출력 - 커피 감소

출력 > 남은 커피양 알려준다.

 

이렇게 반복하다가 커피가 0이 되었을 경우, 커피가 다 떨어졌다는 출력과 함께 정지 멈추게된다. 

 

이렇게 멈추기 위해 break문을 사용한다! 

 

 

public static void main(String[] args) {
    int coffee = 10;
    int money = 300;

    while (money > 0){
        System.out.println("돈을 받았으니 커피를 줍니다.");
        coffee--;
        money = money - 100;
        System.out.println("남은 커피의 양은" + coffee + "입니다.");
        if(coffee == 0){
            System.out.println("커피가 다 떨어졌습니다. 판매를 중지합니다.");
            break;
        }
    }
}

 

여기서 머뉘를 한잔 시킬 때 마다 100씩 차감하게 된다면? 

 

300 초기화를 했으니 3번 사먹으면 머뉘가 0보다 크지 않기 때문에 false 가 되고 while 블록내부는 실행되지 않겠죵? ㅎㅎ

 

 

Q. while 문을 사용해서 1 ~ 10 범위 홀수만 출력해주세요.

    public static void main(String[] args) {
        int number = 0;
        while (number < 10){
            number++;
            if(number % 2 != 0){
                System.out.println(number);
            }
        }
    }

 

 

예시로 1~ 10 범위 홀수만 출력하게 한다면?

 

int number을 0 초기화 

number가 10보다 작을 경우 내부 실행 

number 1 증감 

만약 number % 2 했을 때 나머지가 0이 아니라면? 

출력된다. 

 

여기서 0이아니라는 말은 홀수라는 것을 의미하겠죵? 

 

그럼 1,3,5,7,9 가 출력됩니당!  

 

 

do - while 문

 

do -while 문은 while문의 변형! 

 

while 문과 다르게 블럭을 먼저 실행 후 조건식을 계속 하여 반복을 멈출지 실행할지 판단한다! 

 

 

public static void main(String[] args) {
    // do ~ while 문 사용해서 1~5 출력
    int index = 0;
    do{
        //실행문
        index++;
        System.out.println(index);
    }while (index < 5);
}

 

1~ 5를 출력하기 위해

int index를 0으로 초기화한다

index 증감 

출력한다 index를 

index가 5보다 작을 동안 

 

이걸 보면 알 수 있듯이 do ~ while은 최소 1번은 블럭이 무조건 실행 될 것이고, 수행 후 다음 조건식을 체크하는식! 

 

Q.do-while 문 사용해서 10 이하의 짝수를 구하시오.
    public static void main(String[] args) {
        int i = 0;
        do{
            i++;
            if(i % 2 == 0){
                System.out.println(i);
            }
        }while (i < 10);
    }

 

int i 0으로 초기화

i 증감

만약 2로 나누었을 때 나머지가 0이라면 ? 

(-이건 짝수를 의미하겠죵?)

출력한다 i를 

i가 10보다 작을 동안

 

이렇게 실행하면? 

 

결과는 2 4 6 8 10이 나오게 된다. 

 

 

클래스

 

객체지향 프로그램 특징

 

캡슐화 - 클래스안에 서로 연관되어있는 속성, 기능들을 하나의 캡슐로 만들어 데이터 외부로부터 보호하는 것

 

출처 - 이스트 소프트 조성연

 

다형성 - 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질 

 

 

클래스

 

 

클래스란, 객체의 특징(속성, 기능)을 정해놓은 제품설계도

객체란, 실제로 존재하는 제품

 

 

 

클래스에는 객체의 속성과 기능을 정희해놓을 수 있는데 

속성은 필드에 정의할 수 있으며, 기능은 메서드에 정의할 수 있다. 

 

 

 

사람클래스의 객체는 Person 자동차의 객체 클래스는 Car 라는 이름을 지정할 수 있을 것이다! 

 

 

 

클래스이름도 컨벤션 네임과 같이 규칙에 따라 만들어야하는데엽!

 

1. 하나이상의 문자로 이루어져야한다 Car
2. 첫번째 글자는 숫자가 올수 x 3Car
3. $ _ 외의 특수문자 ㅂ ㅂ 안돼요!
4. 자바 키워드 사용 불가 int x 

 

public class Car {

    public static void main(String[] args) {
        Car car = new Car();  // car 객체 생성
    }
}

 

new 는 객체를 생성할 때 사용하는 키워드! Car의 클래스의 인스턴스인 car 객체가 만들어졌다!!! 선언완료!

 

Car sonata = new Car();
Car avante = new Car();
Car ferrari = new Car();

 

이렇듯 자동차 객체를 만들기 위해 Car라는 클래스를 사용하였는데 

 

이를 비유하면 붕어빵틀과 붕어빵과도 같다. 

 

클래스는 붕어빵이 아니라 붕어빵의 틀과 같다. 

 

붕어빵 틀 = 차종을 찍어내고 

 

객체는 붕어빵 = 자동차 자체 

 

즉, 클래스는 몰드 역할을 하며, 객체를 만들때 템플릿을 기반으로 개별 인스턴스를 만드는것 

 

각 객체는 독립적이며 한 객체를 수정하더라도 다른 객체에 영향을 주지 않는다! 

 

Quiz

객체와 클래스에 대한 설명으로 틀린 것은?
  1. 클래스는 객체를 생성하기 위한 설계도(청사진)와 같은 것이다.
  2. new 연산자로 클래스의 생성자를 호출함으로써 객체가 생성된다.
  3. 하나의 클래스로 하나의 객체만 생성할 수 있다.
  4. 객체는 클래스의 인스턴스이다.

 

 

클래스는 객체를 생성하는 붕어빵틀과 같은 설계도이다. 0

new연산자로 클래스의 생성자를 선언한다 0

하나의 클래스로 하나의 객체만 생성할 수있다. x

- 하나의 클래스 (템플릿) 으로 다른 차종을 찍어내듯 여러 객체를 만들 수있다. 

객체는 클래스의 인스턴스지요!!~~ 0

 

이렇게 정답은??????????

 

3번!!!!!!!! 하나의 객체 아니예요오오옹오오오 

 

 

 

클래스의 구성

 

클래스의 구성으로는 필드, 생성자, 메소드가 존재한다. 

 

이 구성은 생략되거나 여러개로 구성될 수 있다!

 

 

 

 

음....... 클래스의 구성 진도를 완벽히 나가지 않았기 때문에 

 

구성은 내일 수업 후 클래스 한꺼번에 올리는게 좋을 거 같아요!!!! ㅎㅎㅎㅎ

 

 

나중에 다시 찾아보기 그게 더 좋을 거같습니다욥!~

 

 

이렇게 오늘도 반복문과 클래스란 무엇인가를 간략하게 공부해보았어욥!!!

 

 

흠 클래스가 조금 이해하기 힘들었는데

 

 

붕어빵틀과 붕어빵을 비유하니 

 

 

조금 이해가 된거 같아요!!! ㅎㅎㅎ 수업 후 멘토님의 요약 정리도 한몫 했구요 ㅋㅋㅋㅋㅋㅋㅎㅎㅎㅎ

 

 

오늘도 데일리 퀴즈 풀고 복습 후 꿀잠 자도록하겠습니다아~~~~

 

 

( 회먹어야지 오늘저녁 ㅋㅋㅋㅎㅎㅎ>_< )

 

 

 

 

 

오늘도 열심히했고!!!!!!!!!!!!!!!!!

 

 

내일도 !!!!!!!!!! 파이팅!!!!!!!!!!!