Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240619 JAVA2주차 뿌시기 본문

개발Article

[TIL]20240619 JAVA2주차 뿌시기

최밤빵 2024. 6. 20. 01:11

JAVA문법종합반 2주차 마저듣기! 

오늘 배열부터 나머지 들으면 되는거였는데... 많이 헤맸고 지금도 헤매는 부분이라 유독 시간이 오래걸렸다.

어제 듣고 오늘 또 들었으면 좋았겠다 싶을 정도로 머리에 잘 들어오지않는 부분... 중요하댔는데..ㅠ

 

▶ 배열 (Array (arr이라는 약자로 사용하기도 한다.) 

 → int와 같은 기본형 변수는 1개의 값만 저장할 수 있다면, int [ ] 와 같은 배열형 변수는 여러개를 변수에 저장할 수 있다. 

 → 한번에 많은 양의 데이터를 다루거나 계산할 때 사용한다. 

 1. 타입 [ ] 변수; : 일반적인 선언방식

ex) int [ ] intArray;

 2. 타입 변수 [ ]; : 두 번째 선언방식 

ex) intArray [ ]; 

 

*생성 

→ 참조형 변수들 처럼 new명령을 통해 생성한다. [ ] 안에 크기를 지정한다.

몇 개를 담을지 미리 정의해준다고 생각하면 된다. 주의할 점은 사이즈를 지정해서 생성된 분류통은 각 칸마다 순번이있다.

index는 0부터 8개사이즈라면 0~7까지 있다. 배열은 생성될때 각 타입별 초기값으로 초기화되어 채워진다. 

초기값 : int = 0, boolean = flase, String = null(없는 값) 

 

생성한 배열을 '순회' → 배열의 값을 하나씩 뽑아서 조회한다. 

1. 단건 조회 

2. 다건 조회

length는 배열의 길이를 구하는 메서드.

출력은 배열이 초기화된 값이 출력된다.  // 0, 0, 0 

 

▶ 배열의 초기화 

 

1. 배열의 특정값을 대입해서 선언.

 

2. for문을 통해서 대입

 

→ 다건 출력 

길이는 5. index는 0부터.  출력 : 0, 1, 2, 3, 4

 

→ 향상된 for문에서는 i가 index(0)이 아니라 item으로 중괄호 안에있는 숫자 하나하나의 값을 표현한다. 

헷갈릴까봐 item으로 바꿔주신 기억이 난다.

 

→ 배열의 주소를 모두 같은 값으로 초기화

선언은 위와 동일! 길이만큼 다 1로 채워져서 11111이 출력된다. 

 

" Arrays 라는 자바의 유틸리티. 배열과 관련 된 작업을 할 수 있는 메서드들이 다 들어있다. 유용한 걸 가져다 쓰면 된다. 

  Arrays. fill이라는 메서드를 따로 검색 해 봤는데, 단일 값으로 배열을 채울 수 있고, 배열의 일부만 채우는 것도 가능하다!"

 

채울 배열 내 범위를 지정 할 수도있다. 예를 들어, 처음 세 요소만 1로 채우려 하는 경우에는 

0부터 3번째 전까지의 범위를 정해주면 ( 0은 포함되고 3은 제외 그래서 0, 1, 2만 바뀐다)

이렇게 앞 세 요소만 1로 바뀌어 출력되는 걸 볼 수 있다!

 

▶ 얕은 복사 

얕은 복사는 주소값만 복사된다. 실제값은 1개로 유지되는 복사

주소값만 복사된다는건 변수 명은 다르지만 같은 값을 보고있다. 예를 들자면 내 폰과 pc에 카카오톡 로그인을 하지만 

그래도 내 계정은 하나인 것과 같다. 

b의 0번째 자리를 3으로 바꿔준 뒤 , a의 0번째를 출력해봤는데 3으로 바뀌어있다. 

따라서 얕은 복사는 a의 값에도 영향을 끼친다. → 바람직하지않아요! 

 

▶ 깊은 복사 

가짜 복사가 아니라 진짜 새로운 배열을 만들고 싶을 때 깊은 복사를 한다. 

이렇게 복사를 해주었을 때 a = 1이 출력되고 , b의 값을 변경해도 a의 값은 그대로라는 걸 알 수 있다. 

(설명이 많이 달려있는건.... 선택 과정에서부터 2주차 배열강의를 시작으로 머릿속에 잘 들어 오지 않고 있다 ㅠㅠㅠㅠ.. )

 

깊은 복사의 방법은 위 처럼  for문을 통해서 하나씩 꺼내 복사해주는 방법과 , 여러 메서드를 이용하는 방법이 있다. 

먼저, clone() 메서드

간단한 방법이지만, 2차원 배열에서는 얕은 복사로 동작한다고 한다. 

설명을 기억하기론, a를 완전히 복사는 하지만, 주소를 다른 걸 가지고 오는 메서드이다.

예를 들어 배열 안에 배열이 있는 경우 [[1 ,2] , [1, 2]] 

[1, 2] , [1, 2] 의 다른 주소값을 가져오지만 [ ] 안의 1, 2 는 같은 주소값을 가지게 되므로 근본적인 방법은 아니다.

라고 기억하고있는데 맞는 설명인지는 모르겠다 ㅠ 어쨌든 부족한 복사인건 확실하다😵‍💫

 

두 번째는, Arrays.coptOf() 메서드 

Arrays.copyOf () 괄호 안에 배열과 함께 length값도 같이 넣어주고 

확인을 위해 a의 3번째 자리수를 0을 바꿔준다. 그리고 같이 출력을 해보면

a = 0 ,b = 4로 출력이 되면서 깔끔하게 복사가 잘 된 것을 알 수 있다 . 

 

▶  String 배열 

문자 (char / 1byte), 문자열(String)  → String = char [ ] 

 

문자형은 기본형 변수이고 문자열은 참조형 변수이기 때문에, 차이점을 적어보자면 ( 붕어같은 나를 위해!)

기본형 변수는 '소문자'로 시작하고, 참조형 변수는 '대문자'로 시작한다. 

Wrapper class에서 기본형 변수를 감싸줄떄 int → Integer 소문자를 대문자로 감싸주는 녀석들은 대문자였다. 

기본형 변수는 값 자체를 저장, 참조형 변수는 별도의 공간에 값을 저장 후 그 주소를 저장한다. 

그래서 주소형 변수라고도 한다.

char < String   훨씬 더 많이 쓴다. → String 이 가지고 있는 기능이 너무 많아서! 

Wrapper class와도 상당히 비슷하다. 기본형 변수가 가지고 있는 기능이 제한되어있는데,

다양한 기능을 제공하는 Wrapper를 감싸줘서 추가기능을 더한다. 

 

→ String 기능의 활용 예시 

 

String str = "ABCD"; 를 선언해주고,

 

1. length (길이)

4가 출력된다. 0, 1, 2, 3 → 4개니까!

2. charAt 

B 출력! 위에 적은것과 마찬가지로 1의 자리는 두번째 자리인 B가 출력된다. 

3. subString(int fromIdx, int toIdx) : 문자열 자르기 

0번째부터 3번째 전까지 자르면 ABC 출력! 

4. equals(String str) : (어떠한 String이 입력받은 String와 같니?) output은 true or false가 나오게 되어있다.  

false의 결과를 위해서 ABCE로 바꿔 주었다. 안 바꿨으면 true가 출력되었을 거다.

5. toCharArray() : String → char[ ] 변환 

ABCD출력. 문자로 하나하나! 

6. char [ ] → String → char

문자형 이 문자열 형태로 변환된다. ABC 출력. 

 

....

 

😢오늘의 회고...

 사실 오늘은 남은 2주차 강의를 다 들었는데... 선택과정에서도 가장 헤매던 배열에서부터 얼굴이 고구마가 되기시작했다. 오늘 TIL에 컬렉션까지 다 쓸 수있겠다 했는데 위 내용을 쓰는 것도 많이 불완전해서... 속상하다.

남들보다 이해력이 늦어서 많은 시간을 소요하고 있지만 , 어렵다...원래 어렵지만 그래도 선택과정에서도 들은게 있는데 어렵다.... 이래서 진도는 쫒아갈 수 있을까 3주차는 더 어렵다던데. 미니 프로젝트를 시작을 자꾸 개발공부를 하는게 

나랑은 맞지 않는건가 라는 생각이 많이 든다. TIL 쓰면서도 자꾸 주눅이들어서 쓰다가 말고 다시 공부하러 갈 예정... 

조급해하지 말라고 했는데.. 다른사람들은 숙제나 과제를 해내는 걸 보니 조급하지 않을 수가 없는 것 같다 . 나는 원래 느리지만.. 내 속도로 걷는 건 너무 느려...😟 이렇게 걱정해서 되는 건 아무것도 없으니까!!! 일단은 다시 공부하러 갑니다...