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
// 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이 같은 값을 가지는 주소를 훑고 같은 주소를 가졌을 경우 같은 주소를 참조한다.
'교육 > Java&Spring' 카테고리의 다른 글
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 7 (0) | 2022.12.28 |
---|---|
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 6 (0) | 2022.12.28 |
java & spring 1 (1) | 2022.12.24 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 4 (0) | 2022.12.23 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 3 (0) | 2022.12.22 |