관리 메뉴

애독자's 공부방

[혼공자] 2주차 _ 혼자 공부하는 자바(개정판) 본문

Java/혼공학습단 12기

[혼공자] 2주차 _ 혼자 공부하는 자바(개정판)

애독자 2024. 7. 8. 00:21
728x90

혼공단 - 혼공자, 혼자 공부하는 자바(개정판)

 

 

■ 공부한 내용

# 진도 기본 숙제(필수) 추가 숙제(선택)
2주차
(7/8 ~ 7/14)
Chapter 04 ~ 05 p.164 직접 해보는 손코딩(switch문) 실행 후 결과 화면 캡쳐하기 p.223 하단 (05-2) 확인 문제 6번 풀고 정리하기

 

 

□ Chapter 04

 ▷ 04-1

  - if문: 조건식이 true가 되면 중괄호 내부를 실행

    . if( 조건식 ) { 실행문 }

  - if-else문: 조건식이 true가 되면 중괄호 내부를 실행하고, false가 되면 else 중괄호 내부를 실행

    . if( 조건식 ) { 실행문A } else { 실행문B }

  - if-else if-else문: 조건식1이 true가 되면 if 중괄호 내부를 실행하고, 조건식2가 true가 되면 else if 중괄호 내부를 실행하며, 조건식1과 조건식2가 모두 false가 되면 else 중괄호 내부를 실행

    . if( 조건식1 ) { 실행문A } else if( 조건식2 ) { 실행문B } else { 실행문C }

  - switch문: 변수의 값이 값1이면 첫 번째 case 코드를 실행하고, 값2이면 두 번째 case 코드를 실행하며, 값1과 값2가 모두 아니면 default 코드를 실행

    . switch( 변수 ) { case 1: 실행문A case 2: 실행문B default: 실행문C }

 ▷ 04-2

  - for문: 조건식이 true가 될 때까지만 중괄호 내부를 반복하고, 반복할 때마다 증감식이 실행되며, 초기화식은 조건식과 증감식에서 사용할 루프 카운터 변수를 초기화 (주로 지정된 횟수만큼 반복할 때 사용)

    . for( 초기화식; 조건식; 증감식 ) { 실행문 }

  - 중첩for문: for문이 또 다른 for문을 내포한 것으로, 바깥쪽 for문이 한 번 실행할 때마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 복귀

    . for( 초기화식1; 조건식1; 증감식1 ) { 실행문A; for( 초기화식2; 조건식2; 증감식2 ) { 실행문B } }

  - while문: 조건식이 true가 될 때까지만 중괄호 내부를 반복 실행

    . while( 조건식 ) { 실행문 }

  - do-while문: 먼저 do 중괄호 내부를 실행하고, 그다음 조건식이 true가 되면 다시 중괄호 내부를 반복 실행

    . do { 실행문 } while( 조건식 );

  - break문: for문, while문, do-while문 내부에서 실행되면 반복을 취소

  - continue문: for문, while문, do-while문 내부에서 실행되면 증감식 또는 조건식으로 복귀

 

□ Chapter 05

 ▷ 05-1

  - 기본 타입: byte, short, char, int, long, float, double, boolean 
    . 기본 타입의 변수에는 값 자체를 저장
  - 참조 타입: 기본 타입을 제외한 배열, 열거, 클래스, 인터페이스 등으로, 번지로 객체를 참조한다는 의미
    . 참조 타입의 변수에는 객체의 번지가 저장
  - 메모리 사용 영역: JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 3개 영역으로 구분해서 사용
    . 메소드 영역: JVM이 시작될 때 생성되고, 모든 스레드가 공유
      → 정적 필드, 상수, 메소드 코드, 생성자 코드가 위치
    . 힙 영역: 객체와 배열이 생성되는 영역
    . JVM 스택 영역: 최초로 변수에 값이 저장(초기화)될 때 변수를 생성
      → 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거됨
  - 비교 연산자(==, !=): 기본 타입에서 사용되면 값을 비교, 참조 타입에서 사용되면 번지를 비교
    . == 연산의 결과가 true이면 같은 객체를 참조한다는 뜻이고, false이면 다른 객체를 참조한다는 뜻
  - null: 참조 타입 변수가 객체를 참조하지 않는다는 뜻으로 이 값을 가질 수 있음
    . null 값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성됨
  - NullPointerException: 참조 변수가 null을 가지고 있는 경우에는, 참조 객체가 없으므로 참조 변수를 통해 객체를 사용 불가
    . null인 참조 변수를 통해 존재하지 않는 객체의 필드나 메소드를 사용하면 해당 오류가 발생

 ▷ 05-2
  - 배열: 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스를 부여해놓은 자료구조
    . 인덱스: 배열 항목에 붙인 번호 (0번부터 시작하며 0~'배열길이-1'까지 범위를 갖음)
  - 배열 선언: 변수 선언과 비슷, 대괄호가 추가되어 '타입[] 변수;' 형태로 선언됨
    . 타입: 배열에 저장될 데이터의 타입
  - 배열 생성: { 값1, 값2, 값3, ... }처럼 값 목록으로 생성하는 방법과, 'new 타입[길이];'로 생성하는 방법 존재
  - 배열 길이: 배열에 저장할 수 있는 항목(값)의 수
    . 배열의 length 필드에 저장되어 있기에, '변수.length'로 배열 길이를 확인
  - 명령 라인 입력: 문자열 목록으로 구성된 String[] 배열이 생성되어 main() 메소드를 호출할 때 매개값으로 전달
    . main() 메소드의 매개값인 String[] args의 의미: main()은 이를 통해 명령 라인에서 입력된 데이터의 수(배열의 길이)와 입력된 데이터(배열의 항목 값)을 알 수 있음
      1) JDK 11 이후: java -p . -m 모듈명/패키지.클래스 문자열0 문자열1 문자열2 ... 문자열n-1
      2) JDK 8 이전: java 패키지.클래스 문자열0 문자열1 문자열2 ... 문자열n-1
  - 다차원 배열: 배열 항목(값)이 도 다른 배열을 참조할 때
    . 선언 및 생성 방법: 타입[][]변수 = new 타입[길이1][길이2];
      1) 변수.length: 1차원 배열의 길이1
      2) 변수[인덱스].length: 해당 항목이 참조하는 2차원 배열의 길이2  
  - 향상된 for문: for( 타입 변수 : 배열 ) { 실행문 }
    . 반복 실행을 하기 위해 루프 카운터 변수와 증감식을 사용하지 않음
      → 배열의 항목 개수만큼 반복하고, 자동적으로 for문을 탈출 (반복할 때마다 변수에는 배열에서 가져온 항목이 저장)

 ▷ 05-3

  - 열거 타입: 몇 가지로 제한된 상수를 가지는 타입

    . 열거 상수: 열거 타입 선언 때 주어진 상수를 말하며, '타입.상수' 형태로 사용
      예) Week.MONDAY: Week 열거 타입의 상수 MONDAY 사용
  - 열거 타입 선언: enum 타입 { 상수, 상수, ... } 형태로 선언
    예) enum 타입 { MONDAY, TUESDAY, ... , SUNDAY }
  - 열거 타입 변수: 열거 타입으로 선언된 변수로, 열거 타입 변수에는 열거 상수 중 하나가 대입됨
    예) Week today = Week.FRIDAY;  ← today: 열거 타입 변수

 

 

■ 기본 숙제

  - p.164 직접 해보는 손코딩(switch문) 실행 후 결과 화면 캡쳐하기

    . 저는 6번이 나왔습니다.

 

 

■ 추가 숙제(선택)

  - p.223 하단 (05-2) 확인 문제 6번 풀고 정리하기

    . 저는 향상된 for문 사용해서 진행했습니다.

    . 찾아보니 최대값(max)을 구하는 방법은 여러가지가 있었으나, import를 하지 않는 방법으로 진행했습니다.

      → Java.lang.Math.max() 이용

        ※ https://docs.oracle.com/javase%2F8%2Fdocs%2Fapi%2F%2F/java/lang/Math.html#max-int-int-

if (selectNo == 1) {
    System.out.print("학생수> ");
    studentNum = Integer.parseInt(scanner.nextLine());
    scores = new int[studentNum];
} else if(selectNo == 2) {				
    for(int i=0; i<scores.length; i++) {
        System.out.print("scores[" + i + "]> ");
        scores[i] = Integer.parseInt(scanner.nextLine());					
    }
} else if(selectNo == 3) {
    for(int i=0; i<scores.length; i++) {
        System.out.println("scores["+ i +"]> "+ scores[i]);					
    }				
} else if(selectNo == 4) {
    int max = Integer.MIN_VALUE;				
    int sum = 0;
    for(int score : scores) {
        max = Math.max(max, score);
        sum = sum + score;
    }
    System.out.println("최고 점수: " + max);
    double avg = (double) sum / scores.length;
    System.out.println("평균 점수: " + avg);
}

 

 

728x90