끝을 보는 용기

Spring 사전캠프 Day 026 - 자바(Java) 공부: 배열 (2/4)

writingforever162 2024. 11. 1. 22:47

사전캠프 마지막 날을 맞이했다. 첫날부터 하루도 빼먹지 않고 출석한 스스로가 신기하기도 하고, '마지막 날'이라고 하면 막 엄청 뿌듯할 줄 알았는데 의외로 마음속이 평화롭다. 아직 본캠프가 아니라서 그런가. 생각보다 차분한 기분과는 별개로 여태까지 한 조에서 공부한 팀원과 헤어진다는 점을 떠올릴 때면 아쉬움을 숨기기 어렵다.

 

어쩌면 이 감정의 파도는 그동안 모난 돌이 아닌 둥근 돌로 지내려고 애썼다는 방증이자, '다른 조에 가서는 그 이상으로 팀원 구실을 할 수 있을까?'라는 질문에 갈고리처럼 걸린 물음표 끝이 꽤 날카롭다는 의미일지도 모르겠다.

 

다음 주 월요일부터 함께 할 팀원들과 얼마나 합이 잘 맞을지 걱정이 안 된다고 말하면 거짓말이나 다름없다. 이러한 마음속 요동을 모른 척하진 않으련다. '그래, 걱정돼.'라고 순순히 인정한다. 그 대신, '주말에 뭘 하면 좋을까?'란 질문 또한 같이 던지련다. 스스로에게.

10월 7일에 사전캠프 문이 열린 뒤로 열정 가득한 팀원들의 격려에 힘입어 단 하루도 놓치지 않았으니, 본캠프에서도 그럴 거다. 나 또한 마찬가지로 누군가에게 기운을 주는 사람이 되면 좋겠다. 아직 본캠프에 들어가기 전 주말이 있으니, '진짜 사전캠프 마지막 날'을 맞이한 소감은 일요일 저녁은 되어야 실감이 나겠다.

 

어쨌든, 고생했다. 오늘도.

 

[습관 관련]

오늘은 강의 10개 중 무려 7개를 들었다! 조금 더 집중했다면 남은 강의 3개도 모두 들었겠지만, 배운 내용을 차근차근 정리할 시간이 필요해서 내일 듣기로 했다. 무엇보다 강의는 내일 들어도 문제없지만, 지금의 팀원들과 한자리에서 웃으며 얘기할 시간은 오늘밖에 없었다. 이런 이유로 TIL 마감 또한 당분간 내일배움캠프에서 정해준 대로 그날의 자정 전으로 수정했다. 아직 공부할 거리가 산더미인 데다, 학습에 재미와 속도가 붙은 순간에 굳이 그 시간의 스위치를 끌 이유가 없었다.

 

'마감을 칼같이 지키는 개발자' 명찰을 내일배움캠프가 끝날 때쯤 달고 있다면, 이것이야말로 진정한 성장의 지표 아닐까?

 

곰곰이 생각해 보면, 지금까지 어떤 습관을 다져야겠다고 다짐하면 그 목표를 하루 이틀 안에 이루려고 했다. 고작 며칠 만에 습관이 체질로 굳지 않는다는 사실을 그렇게 겪어왔으면서 말이다.

 

TIL 제출 시간은 제각각이지만, 매일 공부하고 기록했다.

 

10/31(목) 기준 (25일÷162일)*100으로 전체 캠프 기간의 15.4%나 해냈다.

 

10분의 1 이상 해냈다.

 

[인용 및 참고 출처]

1. 강의: 클래스101 온라인클래스, "[100제 풀이] 예제로 마스터하는 Java(자바) 종합 클래스", 강의 소개, (2024.11.01)

2. 사전: "import", 네이버 영어사전, 네이버 영어사전, (2024.11.01)

3. 구글 검색: Fiveable Library, "What is an import of array in Java?", import java.util.Arrays;, (2024.11.01)

4. 구글 검색: Simplilearn, What is package in Java?, Packages in Java, (2024.11.01)

 

[학습 관련]

1. 복습

ⓐ 클래스(Class)는 객체를 생성하는 틀이다.

ⓑ 메서드(Method)는 함수의 일종. 클래스 안에 있는 함수이다.

ⓒ 인터페이스(Interface)는 일종의 추상 클래스이다. 인터페이스는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하고, 클래스들 사이를 중계한다.

ⓓ 복습 링크: Spring 사전캠프 Day 015 - 자바(Java) 공부: 변수 (2/6)

 

2. import java.util.Arrays;

ⓐ 사전 속 import: (다른 프로그램에서 데이터를) 불러오다, 수입(하다) ▶ port는 항구를, im은 in을 의미한다. 즉, 항구로 물건을 들여오는 모습을 떠오르면 된다.

ⓑ import java.util.Arrays;는 java.util.package에서 배열 클래스의 기능에 접근할 수 있도록 해 준다. 이 표현은 특정 클래스 또는 전체 패키지를 프로그램으로 가져오는 데에 사용된다. 

▶ This term refers to a statement in Java that allows you to access the functionality of the Arrays class from the java.util.package. It is used to import specific classes or entire packages into your program.

ⓒ 자바에서 패키지는 비슷한 클래스, 인터페이스 및 하위 패키지끼리 묶은 꾸러미이다.

A Java package is a set of classes, interfaces, and sub-packages that are similar.

 

3. 세 가지 방법으로 배열 선언과 동시에 특정 값으로 초기화하기 (단, for문 대신 적절한 메서드를 사용하여 값을 출력할 것!)

// 반복문 대신 Arrays.toString() 메서드로 배열 값을 출력할 수 있다.
// (소괄호)에 들어가는 인자로는 배열명을 넣으면 된다.
// 해당 메서드를 쓰려면 import java.util.Arrays;를 클래스 이전에 써야 한다.
// 해당 메서드를 사용하면 [배열 값]으로 출력된다.
import java.util.Arrays;
public class ArrayPrac2 {
	public static void main(String[] args){
		int[] coffeeSales1 = {50, 40, 30, 20, 10};
		System.out.println(Arrays.toString(coffeeSales1));
		// 출력문: [50, 40, 30, 20, 10]

		int[] coffeeSales2 = new int[] {100, 90, 80};
		System.out.println(Arrays.toString(coffeeSales2));
		// 출력문: [100, 90, 80]

		int[] coffeeSales3;
		coffeeSales3 = new int[] {72, 314, 45, 190, 90, 512, 238, 86, 14, 42};
		System.out.println(Arrays.toString(coffeeSales3));
		// 출력문: [72, 314, 45, 190, 90, 512, 238, 86, 14, 42]
	}
}

 

4. .arraycopy() 메서드를 사용하여 배열 복사하기

(1) .arraycopy() 메서드 구조 파악하기

① Object src: 원본 배열명. 해당 배열에서 어느 구간을 떼어낼지 정하면 된다.

② int srcPos: 원본 배열에서 떼어내고 싶은 특정 구간의 첫 인덱스. 즉, '원본 배열의 어디서부터 떼어낼 것인가?'를 결정한다.

③ Object dest: 복사 배열명. 즉 덮어씌우려는 배열의 이름을 의미한다.

④ int destPos: '원본 배열에서 떼어낸 구간이 복사 배열의 어디서부터 시작하는가?'를 결정한다. 복사 배열의 인덱스를 입력하면 된다.

⑤ int length: 복사하려는 배열의 크기, 즉 길이. ② int srcPos부터 얼마나 떼어낼지를 결정한다.

 

(2) 배열 복사하기

import java.util.Arrays;
// [복습 1] Arrays.toString() 메서드를 쓰려면 반드시 써야 한다.
// [복습 2] import java.util.Arrays;는 클래스 이전에 입력한다.
public class ArrayPrac2 {
    public static void main(String[] args){
       int [] arrayToCut = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
       int [] arrayToPaste = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};

       System.arraycopy(arrayToCut, 2, arrayToPaste, 4, 3);
       // Object src: arrayToCut 배열의,
       // int srcPos: 인덱스 2. 즉 3번째 값인 3부터 떼어내서,
       // Object dest: arrayToPaste 배열에 덮어씌우려는데,
       // int destPos: 인덱스 4. 즉 5번째 값인 60부터 덮어씌운다.
       // int length: 이때, 크기는 3이므로 {3, 4, 5}를 떼어낸다.
       // 종합하면, 떼어낸 {3, 4, 5} 구간이 {60, 50, 40}을 덮어씌운다.
       
       System.out.println(Arrays.toString(arrayToPaste));
       // 출력문: [100, 90, 80, 70, 3, 4, 5, 30, 20, 10]
    }
}

 

5. 실습 결과

실습하면서 변수 이름 짓는 법을 검색하는 이유를 깨닫는다. 주석을 달 때면 종종 '지금 쓰는 단어가 맞나?' 또는 '이 표현이 정확한가?' 의문이 들어 마찬가지로 검색하게 된다. int a, b, c와 같이 쓰면 쓸 때는 편한데, 나중에 설명을 읽었을 때 이 이름이 어디서 튀어나왔나 미간을 찌푸릴까 봐 변수 하나 명명하는 데도 상당히 오랜 시간과 공을 들인다. 이름 짓기 한번 참 어렵다.

 

[기타 사항]

내일은 미뤄둔 취미 좀 즐기고 일요일에는 새로운 마음의 양식을 구하러 가야겠다.