solog 2025. 1. 14. 02:11

5-1. 배열-1차원 배열 (특징, 선언과 객체생성, 메모리구조, 값입출력)

- 참조자료형 (무한개) : 배열, 열거, 클래스/인터페이스

- 대표적인 참조자료형이 배열과 String이다.

- 배열의 크기를 지정하면 변경불가하다! 

- int와  int 배열은 다르다. (배열은 참조자료형이다.)

-  null은 참조변수 값의 초기값이다. 즉, 0, -1, 1과 같은 값을 집어 넣는 것이 아니라, 가리키는 객체가 없다는 것을 의미하는 null로 초기값을 설정해야한다.

 

- new 의미는 heap 메모리에 객체(int [3]를 저장할 수 있는 방 3개)를 만들어서 넣어라 라는 의미이다.

- 두번째 특징은 객체 생성시 개수가 지정되어야 한다. => 즉, new double[5] 처럼 개수 지정

- stack은 강제 초기화가 x, 그러나 heap에는 강제초기화가 가능하다. 즉, stack은 값을 집어 넣지 않으면 빈칸으로 존재할수있지만, heap은 빈칸으로 존재할 수 없기 때문에 타입에 따라 초기화 값이 지정된다. (위에 int이기 때문에 0으로 초기화 된것)

 

5-2. 배열-1차원 배열 (세 가지 초기값 부여방식 및 출력)

 

3가지 방법 모두 기억하기.

 

- 힙메모리는 빈칸으로 존재할 수 없기 때문에 강제초기화 된다.

- 기본자료형이 됐든 참조자료형이 됐든 모든 변수는 스택에 들어간다.

- 참조자료형은 스택에 참조 값이 스택에 들어가고, 값은 힙에 저장하고 있다.

- '='가 스택 메모리의 값을 복사하므로 각 자료형마다 복사하는 값이 다른것이다. (기본이 값, 참조가 위치)

- a.length에서 . 의 의미는 그 위치로 가라는 뜻이다. (가리키는 곳으로 가라)

- 하나하나 출력하지 말고 항상 반복문을 이용하자.

- 배열에서 사용할 수 있는 반복문인 for each 구문을 이용하자.

- for each에서 '원소자료형 변수'는 자료형 원소의 타입 변소를 넣으면 된다. 

- 원소자료형 변수의 의미는 묶음 참조자료형에서 하나씩 데이터를 꺼냈을 때 넣을 그릇을 의미한다. 

- 일차원배열일때 Arrays.toStrinig을 이용하자.

 

5-3. 배열-2차원 배열과 main() 메서드 매개변수

- 2차원 배열의 구조를 이해하는 것이 뒤의 내용들을 이해는 것에 중요하다. ★ ★ ★

- 정방행렬은 행과 열의 수가 같은 것이고, 비정방행렬은 행과 열의 수가 다른 것이다.

- 방법2는 비정방행렬을 나타낼때도 사용하므로 기억하자.

- 방법3인 앞에서와의 차이점은 분리할 수 없다!

- 메모리를 이해하고 있다면 length를 구하는 것은 쉽다.

- 2중 for문을 사용해야 한다.

- a.length와 a[i].length를 왜 사용했는지를 이해하는 것이 중요하다.

- for-each 구문도 결국 2중 for문을 사용해야한다. (a 배열에서 m을 담고 m이 행을 의미하면, 각 열인 n의 값을 담아 출력)

- 만약 string 값에 안녕하세요, 3, 5.8 을 대입해도 이 값들은 string 참조자료형이기 때문에 b+1을 했을 때 4가 아니라 '31' 이 나올 것이다. 즉, string + 숫자는 string이다. 

- string값을 가지고 숫자 연산을 하고 싶다면 아래의 tip 함수를 사용하여 정수와 실수로 바꿔주어야 한다.

 

- Tip

: 문자열 => 정수 - integer.parseInt(문자열)

: 문자열 => 실수 - Double.parseDouble(문자열)

 

5-4. String 참조자료형

- class는 붕어빵 기계 / 객체는 붕어빵 => 즉, 객체는 여러개이다.

- 생성자의 출력이 객체가 나오는 것이다. (생성자란, 클래스랑 같은 이름이면서, ()가 있는 형태이다.)

- 클래스와 객체를 구분하자.

- String 객체는 값 변경이 불가능하므로 새로운 내용을 설정하려면 새로운 객체를 만들어야한다.

- '='는 값을 대입, 참조값을 그대로 복사하라 라는 의미.

- str1 = "안녕하세요"; => 값을 변경할 수 없으므로 새로운 값인 200번지를 생성하여 안녕하세요 생성

- String str3 = "안녕" 일 때 리터럴로 집어 넣었다. => 리터럴로 만들 때는 리터럴로 만들어진 것중에 같은 것이 있을 때 기존의 것을 재활용한다.

- 리터럴의 값을 재사용하기 위해서 기존의 값을 변경할 수 없는 것.

- 계산 연산의 의미가 아니라, '연결'을 한다는 의미

- 연산은 항상 같은 타입끼리만 연산이 가능하다.

- 즉, 기본자료형 + 문자열 일 때, 기본자료형이 문자열로 변환된다. (업캐스팅이 아님, 자동변환)

- System.out.printIn(1+2+"안녕")은 헷갈리면 안됀다. 3안녕이다. (구분가능해야한다.)

- stataic은 '정적' 이라는 의미이다. => 클래스는 붕어빵 기계인데 static은 기계에 바로 적용할 수 있다는 의미이다.

즉, 그렇게 때문에 String에 바로 . 을 찍을 수 있는 것이다.

 

 

 

 

 

 

 

https://www.youtube.com/@doit4312/playlists

 

Do it 자바 완전 정복 동영상 강의

Do it 자바 완전 정복 동영상 강의입니다.

www.youtube.com

위 강의를 참고하여 작성하였습니다.