본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 5

by Renechoi 2022. 12. 26.

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 5


 

배열 

 

배열이 왜 필요할까? 

 

변수 = 개별 정보를 저장하는 것들

e.g. 

int kor = 100; 

 

학생이 1500명이 있다면 ? 

 

10개의 다른 이름을 갖는 변수들

-> 10개의 데이터를 저장할 수 있는 배열 

 

 

int 배열 선언 

int[] arr;

 

배열 변수는 참조형 변수이다. 

-> 직접적인 값이 아닌 주소형으로 저장 

 

new 를 통한 생성 

arr = new int[5];

 

 

private static void arrayBasic() {
        //1 배열 선언
        int[] arr;

        //2 배열 생성
        arr = new int[5];

        // 동시에
        int[] arr2 = new int[5];
    }

 

 

생성한 배열을 초기화하기 

 

int arr[] = new int[5];

arr[0] = 10;
arr[1] = 20;
arr[2] = 30;

 

 

 

선언 + 생성 + 초기화 = 모두 함께 하기 

 

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

 

 

 

배열과 for문을 같이 사용하기 

 

enhanced loop 버전 

private static void arrayWithForLoop() {
    int[] arr = {10, 20, 30, 40, 50};

    for (int j : arr) {
        System.out.println(j);
    }
}

 

 

 

배열 사용 방법 

1. 배열에 사용될 데이터 타입을 결정하기 ! (int[])

2. 배열의 크기를 결정하기 

3. 배열생성 방법 선택하여 생성 

4. 배열 초기화 

5. 배열에 있는 데이터 출력 (일반 for문 or 향상된 for문) 

 

*ArrayIndexOutOfBoundsException 발생 관련 아래 링크 참고 

https://upcurvewave.tistory.com/231

 

자바 예외 종류

1. NumberFormatException Integer 클래스의 parseInt 메서드 사용시 숫자가 아닌 다른 값을 변환하려고 할 때 발생한다. e.g. String numberString2 = "2000한글"; try { int numberInt2 = Integer.parseInt(numberString2); System.out.pri

upcurvewave.tistory.com

 


// TODO : 키보드로부터 문자열을 입력받아 배열에 추가한 후 전체를 출력해보자.
// "q"를 입력할 때까지 입력 받기
// 입력 : 홍길동
// 입력 : 박길동
// 입력 : q
// 출력 : 홍길동, 박길동
String[] names = new String[2];

Scanner scanner = new Scanner(System.in);

for (int i =0; i<2; i++){
    String name = scanner.nextLine();
    if ("q".equals(name)){
        break;
    }
    names[i] = name;
}

System.out.println(Arrays.toString(names));

 


숫자 크기로 생성된 배열은 기본 리터럴을 갖는다. 

 

int : 0

doulbe : 0.0

string : null

boolean : false

 


 

// TODO : 성적 관리 프로그램을 배열로 구현해보자
// 국어, 영어, 수학, 총점, 평균

 

package kosta.mission.mission02;

import java.util.Scanner;

public class Mission02_2 {
    public static void main(String[] args) {
        // TODO : 성적 관리 프로그램을 배열로 구현해보자
        // 국어, 영어, 수학, 총점, 평균

        int[] scores = new int[3];

        Scanner scanner = new Scanner(System.in);

        int sum = 0;
        for (int i = 0; i < scores.length; i++) {
            scores[i] = scanner.nextInt();
            sum += scores[i];
        }

        double average = sum / (double) scores.length;
        System.out.printf("총점 : %d, 평균 : %.2f\n", sum, average);
    }
}

 

 


 

메서드 (함수)

 

- 메서드 정의 (내용) => 메서드 호출 (사용)

- 접근 제어자, (static), 리턴형 (void), 메서드 이름(파라미터{메서드 실행 내용})

 

메서드 생성 예시 

package kosta.basic.day005;

public class MethodExam {
    public static void main(String[] args) {
        printWord("*", 3);

    }
    private static void printWord(String string, int number){
        for (int i = 0; i < number; i++){
            System.out.println(string);
        }
        System.out.println();
    }
}

 

 

return 값이 있는 메서드 

 

private static int add(int num1, int num2){
    return num1 + num2;
}

 

 

return 형 메서드에서 return 받은 값을 변수에 담아서 사용한다. 

 

int total = add(1,2);

 


 

 

값 호출 vs 주소 호출 

 

// CallByValue vs. CallByReference

 

number가 바뀔까 안바뀔까?! 

 

package kosta.basic.day005;

public class CallByExam {
    public static void main(String[] args) {
        // CallByValue vs. CallByReference
   
        int number = 10;
        change(number);
        System.out.println(number);
    }
    
    private static void change(int number){
        number +=10;
    }
    
}

 

바뀌지 않는다! 

 

값에 의한 호출은 스코프를 벗어나지 않는 한 바뀌지 않는다.

 

메서드에다가 값을 전달했을 때는 기존 scope의 값은 바뀌지 않는다. 

 

=> call by value 

 

레퍼런스 호출은 어떨까? 

 

주소 => 메모리 공간을 가리킴 

 

e.g. int[] arr = {1,2,3} 

arr에는 무엇이 들어있을까? 

 

1,2,3이 아니라, 1,2,3이 들어 있는 주소 값 = reference 

 

int[] arr= {1,2,3};
int[] brr= arr;

System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(brr));

 

같은 곳을 참조한다 ! 

 

이때 arr[0] = > 100으로 바꾸면 

brr[0] => 100 으로 바뀐다. 

 

 

    System.out.println(Arrays.toString(arr));
    System.out.println(Arrays.toString(brr));
    
    testChange2(brr);
    System.out.println(Arrays.toString(arr));
    System.out.println(Arrays.toString(brr));
}

private static void testChange2(int arr[]){
    arr[0] = 100;
}

 

 

* String type의 == 연산이 같은 이유 


private static void testString(){
    String str1 = "hello";
    String str2 = "hello";

    String str3 = new String("hello");
    String str4 = new String("hello");

    System.out.println(str1==str2);         // 원래는 같지 않지만 true가 나오는 이유 : jvm이 같은 값을 가지는 주소를 훑고 같은 주소를 가졌을 경우 같은 주소를 참조한다.
    System.out.println(str3==str4);
    System.out.println();
}

 

원래는 같지 않지만 true가 나오는 이유 : jvm이 같은 값을 가지는 주소를 훑고 같은 주소를 가졌을 경우 같은 주소를 참조한다.

반응형