목차 서론 채용 과정 온라인 전형(서류, 코테, 인성) 1차 면접 채용 검진 & 2차 면접 최종 합격 및 합격 선물 합격 스펙 및 조언 입사 후 8개월 후기 1. 서론 2023년 1분기 현대오토에버 신입 공채 커넥티드 카 서비스(CCS) 부서 백엔드 개발자로 합격하고 개발자의 길을 걷고 있습니다. 당시에는 너무 이것저것 정신없어서 채용 후기를 남기지 못했는데 회사생활을 조금 한 지금 시점에서 후기와 함께 남기는 것도 의미있다고 봅니다! 우선 저는 백엔드 개발자로서 기술 스택으로 봤을 때 두 부서 중 고민했습니다. 그럼에도 커넥티드 카를 선택한 이유는 좀 더 하는 일이 명확했기 때문입니다. 어플리케이션 개발/운영 부서는 뭔가 기술 스택도 너무 광범위하고 담당 업무도 원하지 않는 일을 할 수도 있다고 생각했..
미션에서 여러분은 예외 처리를 어떻게 하고 계신가요? 프리코스를 하셨던 분들이라면 다들 한번쯤은 해봤던 고민이었을 것 같습니다. 아래와 같이 디스커션에서 많은 분들이 질문하고, 의견을 나누는 것을 보았습니다. 더보기 예외처리의 위치에 대해 고민입니다. · Discussion #1747 · woowacourse-precourse 안녕하세요! 객체지향 설계를 하면서, 예외처리를 어떻게 할지에 대한 고민을 계속 이어왔는데요. 저는 도메인 로직에서 예외처리가 존재해야 한다고 생각합니다. 이것은 사용자 입력 뿐만 아 github.com 컨트롤러를 트랜잭션 기반으로 설계하는 건 어떨까요? · Discussion #1770 · woowacourse-precourse 안녕하세요! 요즘 예외처리에 관해 고민이 많은데요,..
여러분은 MVC 패턴에 대해서 얼마나 알고 계신가요? 단순히 먼저 접한 Model, View, Controller의 역할과 단순한 구현 방법에 대해서만 알고 계신가요? 목차 개요 간단한 Lotto 예제 default 예제 코드 MVC 패턴 이전에 MVC ver.0 MVC ver.1 MVC ver.2 MVC ver.3 MVC ver.4 MVC ver.5 마무리 Github Repository Link 1. 개요 해당 글은 우테코 5기 프리코스의 미션 중 다리 건너기 미션을 진행하면서 생긴 의문점을 해결하기 위해 자료를 찾아보고, 공부한 과정을 정리 및 공유하기 위한 글입니다. 혹여나 잘못된 정보는 댓글로 남겨주시면 감사하겠습니다. 우테코 5기 프리코스 4주 차 미션의 다리 건너기 미션을 수행하는데, 미션을..
이번 4주 차 미션에서는 3주 차 미션의 학습 목표에 이어 리팩터링을 추가했어요. 클래스(객체)를 분리하는 연습 도메인 로직에 대한 단위 테스트를 작성하는 연습 클래스(객체)를 분리하는 것에 대해 조금 더 깊이 고민해 볼 수 있도록 클래스의 구조와 제약사항을 요구사항에 추가했습니다. 이외에도 프로그래밍 요구사항으로 메서드의 길이를 10줄로 제한하는 등 난이도가 높은 도전 과제를 추가했어요. 과제를 제출할 때 이번 주 차 목표를 중심으로 학습하면서 느낀 점을 소감문으로 작성해 주세요. 이때 학습한 '과정’을 잘 드러내 주세요. 이번 우아한 테크 코스 5기 4주 차 미션은 다리 건너기 게임 미션이다. 자세한 내용은 해당 우테코 깃허브를 통해 공개해놓고 있다. 더보기 우테코 깃허브: GitHub - woowa..
지난 2주 차 미션에서는 함수 분리와 함수 별로 테스트를 작성하는 것을 목표로 했는데요. 3주 차 미션에서는 2주 차에서 학습한 것에 2가지 목표를 추가했어요. 클래스(객체)를 분리하는 연습 도메인 로직에 대한 단위 테스트를 작성하는 연습 도메인 로직과 단위 테스트와 같은 용어들이 낯설 수 있지만, 작은 기능부터 테스트를 작성하는 연습을 시작해 보는 것입니다. 과제를 제출할 때 이번 주차 목표를 중심으로 학습하면서 느낀 점을 소감문으로 작성해 주세요. 이때 학습한 '과정’을 잘 드러내 주세요. 이번 우아한 테크 코스 5기 3주 차 미션은 로또 게임 미션이다. 자세한 내용은 해당 우테코 깃허브를 통해 공개해놓고 있다. 더보기 우테코 깃허브: https://github.com/woowacourse-preco..
2주 차 미션에서는 1주 차에서 학습한 것에 더해 함수를 분리하고, 각 함수 별로 테스트를 작성하는 것에 익숙해지는 것을 목표로 하고 있어요. 이번에 테스트를 처음 접하시는 분들은 언어별 테스트 도구를 학습하고 작은 단위의 기능부터 테스트를 작성해보길 바랍니다. 과제를 제출할 때 이번 주차 목표를 중심으로 학습하면서 느낀 점을 소감문으로 작성해 주세요. 이때 학습한 '과정’을 잘 드러내 주세요. 이번 우아한 테크 코스 5기 2주 차 미션은 숫자 야구 게임 미션이다. 자세한 내용은 해당 우테코 깃허브를 통해 공개해놓고 있다. 더보기 우테코 깃허브: https://github.com/woowacourse-precourse/java-baseball GitHub - woowacourse-precourse/jav..
과제 진행 소감에는 미션을 진행하면서 느끼고 배운 점, 많은 시간을 투자한 부분 등도 포함하면 더 좋을 것 같습니다. 🙂 그리고 과제를 제출할 때 'git’과 '과정별 언어’를 학습하면서 느낀 점을 소감문으로 작성해 주세요. 이때 학습한 '과정’을 잘 드러내 주세요. 이번 우아한 테크 코스 5기는 이전 기수들과 달리 1차 코딩 테스트가 없어지고, 기존의 프리코스 3주 차에서 4주 차로 바뀌면서 1주 차에 온보딩 주차가 추가되었다. 온보딩에 대한 자세한 내용은 해당 우테코 깃허브를 통해 공개해놓고 있기 때문에 들어가서 확인하면 된다. 더보기 우테코 깃허브: GitHub - woowacourse-precourse/java-onboarding: 온보딩 미션을 진행하는 저장소 온보딩 미션을 진행하는 저장소. C..
제어자란? 제어자는 클래스, 변수, 메소드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 자바에서 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 분류할 수 있다. 접근 제어자 public, protected, default, private 그 외 static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 클래스앞이나 멤버변수와 메소드 앞에 사용되며, 특수한 경우를 제외하고 하나의 대상에 여러 제어자를 조합하여 사용하는 것이 가능하다 접근 제어자는 네 가지 중 한가지만 선택해서 사용할 수 있다. 즉, 하나의 대상에 대해서 public과 private을 함께 사용할 수 없다. + 제어자 간의 순서는 상관없지만..
자바에서 super와 super()의 차이는 this와 this()의 차이처럼 완전히 다른 개념이다. [Java] this()와 this 자바에서 this()와 this는 같은 키워드를 띄고 있지만 엄연히 다른 문법이다. this() 자바에서 같은 클래스의 멤버(변수, 메소드)간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하 heesangstudynote.tistory.com super super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 인스턴스 내에서 멤버변수와 지역변수의 이름이 같을 때 this키워드로 구별했듯이 상속받은 멤버(조상)와 자신의 멤버(자손)의 변수이름이 같을 때는 super를 붙여서 구별할 수 있다. 조상의 멤버와 자신의 멤..
Object 클래스 자바에서 Object클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다. 아래와 같이 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 한다. class Tv{ ... } 위의 코드를 컴파일 하면 컴파일러가 위의 코드를 아래와 같이 자동적으로 extends Object를 추가하여 Tv클래스가 Object클래스를 상속받도록 한다. 이렇게 함으로써 Object클래스가 모든 클래스의 조상이 되도록한다. class Tv extends Object{ ... } class CaptionTv extends Tv{ ... } 위와같이 만일 CaptionTv클래스가 다른 클래스인 Tv를 상속 받는다고 하더라도 CaptionTv클래스의 조상클래스인 ..
초기화 블럭(initialization block) 자바에서 초기화 블럭에는 클래스 초기화 블럭과 인스턴스 초기화 블럭 두 가지 종류가 있다. 클래스 초기화 블럭은 클래스 변수의 초기화 블럭에 사용되고, 인스턴스 초기화 블럭은 인스턴스 변수의 초기화 블럭에 사용된다. 클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용 인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화에 사용 초기화 블럭을 이용하지 않고도 클래스, 인스턴스 변수들을 초기화 할 수 있지만, 초기화 블럭을 사용하는 이유는 초기화 작업이 복잡하여 명시적 초기화만으로는 부족한 경우를 위해서 제공한다. 초기화 블럭을 작성하는 방법의 경우 인스턴스 초기화 블럭은 단순히 클래스 내에 블럭{}을 만들고 그안에 코드를 작성하기만 하면 되고, ..
자바에서 this()와 this는 같은 키워드를 띄고 있지만 엄연히 다른 문법이다. this() 자바에서 같은 클래스의 멤버(변수, 메소드)간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다. 단, 다음의 두 조건을 만족시켜야 한다. 생성자의 이름으로 클래스 이름대신 this를 사용해야 한다. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서 호출해야 한다. 다음의 코드는 생성자에서 다른 생성자를 호출하였지만, 두 조건을 만족시키지 못했기 때문에 에러가 발생한다. Car(String color){ door = 5; Car(color, "auto", 4); } 첫번째 조건 : 생성자 내에서 다른 생성자를 호출할 때는 클래스 이름 Car()대신 this()를 사용해야 한다. 두번째..
구간 합(Prefix sum)은 무엇이며 어떠한 경우에 활용될까? 문제 예시 아래와 같이 N개의 정수로 구성된 수열이 있습니다. M개의 쿼리(Query) 정보가 주어집니다. 각 쿼리는 L과 R로 구성됩니다. [L, R] 구간에 해당하는 데이터들의 합을 모두 구해보세요. 1) L = 1, R = 3 2) L = 2, R = 5 ... M) L = 3, R = 4 나의 풀이 구간 합을 이용하지 않고 구현한 내풀이는 아래와 같다. public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new ..
배열에 특정 연속된 구간을 처리하는 경우 어떠한 접근 방법이 있을까요? 아래와 같은 문제로 예를 들어봅니다. 문제 예시 아래와 같이 자연수로 구성된 수열(배열)이 있습니다. 합이 5인 부분 연속 수열의 개수를 구해보세요. 시간 제한 : O(N) 답: 2, 3 3, 2 5 => 총 3가지 나의 풀이 일단 투 포인터를 모른다고 해서 문제를 풀 수 없는건 아니다. 풀이 방법을 살펴보면, 아래 그림과 같다. 1, 1+2, 1+2+3, 1+2+3+2, 1+2+3+2+5 => 합이 5인지 체크 2, 2+3, 2+3+2, 2+3+2+5 => 합이 5인지 체크 3, 3+2, 3+2+5 => 합이 5인지 체크 2, 2+5 => 합이 5인지 체크 5 => 합이 5인지 체크 답 : 총 3가지 int[] arr = {1, 2..
코테 문제를 풀면서 배열이 복사할 필요가 있을 때 일일히 인덱스를 이용한 반복문으로 복사해 주었지만, 이미 구현되어있는 메소드를 이용하면 시간절약이 될 것 같아서 정리 해놓으려고 한다. 1. System.arraycopy() public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6}; int[] temp = new int[3]; //요소 3, 4, 5 가져오기 System.arraycopy(arr, 2, temp, 0, 3); System.out.println(Arrays.toString(temp)); } 실행결과: [3, 4, 5] arraycopy()메소드는 5개의 파라미터를 인자로 받는다. System.arraycopy(arr, ..
코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 문제 설명 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요. 제한사항 nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다. nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 ..
IntelliJ의 Terminal에서 vi를 직접 이용하면서(git commit 메시지 수정 등) 명령 모드 이동을 위해 ESC 키를 누르면 편집 창(코드 창)으로 이동하게 되는 경우가 있다. 즉, 명령 모드로 이동할 수 없는 상황이다. 이런경우 단축기 문제이므로 설정해주면 해결 가능하다. 1. File -> Settings -> Tools -> Terminal로 이동 옵션 항목중 "Override IDE shortcuts" 오른쪽에 있는 "Configure terminal keybindings"를 클릭한다. 2. "Switch Focus To Editor"메뉴가 있고 이에 대한 단축키를 변경 또는 헤제한다.
1. 가변인자(varargs) 자바에서 기존에는 메소드의 매개변수의 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었다. 이 기능을 '가변인자(variable arguments)'라고 한다. 가변인자는 '타입... 변수명'과 같은 형식으로 선언하며, PrintStream클래스의 printf()가 대표적인 예이다. public PrintStream printf(String format, Object... args){...} 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다. //컴파일 에러 발생 - 가변인자는 매개변수 마지막에 선언해야 한다. public PrintStream printf(Object... args, String format..
코딩테스트 연습 - 내적 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 programmers.co.kr 문제 설명 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,00..
인텔리제이에서 Windows 운영체제를 쓰는 사용자들은 터미널이 기본적으로 cmd로 되어있기 때문에 리눅스 명령어를 사용할 수 없다. 인텔리제이에서 터미널 설정을 git bash로 바꾸어주면 리눅스 명령어를 사용할 수 있게 된다. Before 1. File -> Settings -> Terminal검색 (단축키 : Ctrl+Alt+S) Shell path부분을 살펴보면 default값이 cmd.exe로 설정되어 있다. 이부분을 바꿔줘야한다. 2. Shell path 수정 Shell path를 다음과 같이 수정 -> Apply, Ok -> 인텔리제이 종료 후 다시 실행 "C:\Program Files\Git\bin\sh.exe[ shell이 설치된 경로 ]" -login -i login -i 옵션을 꼭 추..
1. 가변 배열 2차원 배열을 결국 배열에 배열을 저장하는 형태로 처리하는 사실을 이용하면 길이가 정해져있는 배열이 아니라 보다 자유로운 형태의 배열을 구성할 수 있다. 2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있다. 2. 일반적인 2차원 배열 선언 int[][] arr = new int[5][3]; //5행3열의 2차원 배열 위의 코드를 아래와 같이 표현할 수 있다. int[][] arr = new int[5][]; arr[0] = new int[3]; arr[1] = new int[3]; arr[2] = new int[3]; arr[3] = ne..
1. 커맨드 라인을 통해 입력 Scanner클래스의 nextLint()외에도 화면을 통해 사용자로부터 값을 입력받을 수 있는 방법이 있다. 바로 커맨드라인을 이용한 방법이다. 프로그램을 실행할 때 클래스 이름 뒤에 공백문자로 구분하여 여러 개의 문자열을 프로그램에 입력값으로 전달할 수 있다. 2. 사용 방법 만일 실행할 프로그램의 main메소드가 담긴 클래스의 이름이 TestFree라고 가정하면 다음과 같이 실행할 수 있다. 터미널 창: C:\Users...[TestFree.java의 경로]>java TestFree.java 123 qwe 커맨드 라인을 통해 입력된 두 문자열은 String배열에 담겨서 TestFree클래스의 main메소드의 매게변수(String[] args)에 전달된다. 그리고 메인메소..
코딩테스트 연습 - 음양 더하기 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re programmers.co.kr 문제 설명 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요. 제한사항 absolutes의 길이는 1 이상 1,000 이하입니다. absolutes의 모든 수는 각각 1 이상 1,000 이하입니다. signs의 길이는 absolutes의..
코딩테스트 연습 - 없는 숫자 더하기 0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 문제 설명 0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ numbers의 길이 ≤ 9 0 ≤ numbers의 모든 수 ≤ 9 numbers의 모든 수는 서로 다릅니다. 입출력 예 numbers result [1,2,3,4,6,7..
코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제 설명 더보기 더보기 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 ..
코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 ..
코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수..
코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파..
String클래스는 괭장히 많은 문자열 관련 메소드들을 제공하지만 많이 사용되는 기본적인 것들을 정리해 보았다. 1. charAt() 문자열에서 해당 위치(index)에 있는 문자를 반환한다. String str = "How to use String Method"; System.out.println("str.charAt(10) = " + str.charAt(11)); //실행결과 //str.charAt(10) = S 2. length() 문자열의 길이를 반환한다. 배열의 길이를 알수있는 length와 이름이 동일하다. String str = "How to use String Method"; System.out.println("str.length() = " + str.length()); //실행결과 //s..
1. 배열의 복사 배열은 한번 생성하면 길이를 변경할 수 없다. 따라서 더 많은 저장공간이 필요하면 더 큰 새로운 배열을 만들어서 기존의 배열에 있는 요소들을 일일히 복사해야 한다. for문을 이용하여 배열의 일일히 복사해야 하는데 이러한 작업들은 꽤나 비용이 많이 든다. 물론 for문을 이용해도 되지만 System클래스의 arraycopy()메소드를 이용하면 보다 간단하고 빠르게 배열을 복사할 수 있다. for문은 배열 요소 하나하나에 접근해서 복사하지만, arraycopy()는 지정된 범위의 값들을 한 번에 통째로 복사한다. 각 요소들이 연속적으로 저장되어 있는 배열의 특성때문에 이렇게 처리하는 것이 가능한 것이다. 따라서 배열의 복사는 for문보다 System.arraycopy()를 사용하는 것이 ..