
소스 파일 작성메모장을 이용하여 소스 프로그램을 작성.확장자는 .java로 하여야 자바 소스파일이 됨.소스 파일 컴파일소스 파일을 자바 컴파일러를 이용하여 컴파일.컴파일러의 명령어 버전 이름은 javac.소스 코드 저장 경로에서 명령 프롬프트를 실행해야 함."javac

클래스: 객체 지향 언어의 기본적인 빌딩 블록.자바에서 소스 파일 이름은 항상 public이 붙은 클래스의 이름과 동일하여야 한다.메소드: 특정한 작업을 수행하는 코드의 묶음. (=클래스 안에 정의된 함수)\-> 메소드 앞에 static 키워드가 붙어 있으면, 객체를

변수: 데이터를 담아두는 상자.사용하기 전, 반드시 미리 선언하여야 한다.선언을 하게 되면 컴파일러는 변수의 자료형에 맞는 기억 공간을 미리 확보한다.(선언을 하지 않고 사용하게 되면 컴파일 오류가 발생함)식별자자료형: 변수에 저장되는 데이터의 타입.1) 기초형2) 참
2.3 콘솔에서 입력받기< 입력받기 >읽는 것은 System.in을 사용한다. => System.in은 키보드에서 바이트를 읽어서 전달한다. 이 바이트를 우리가 해석하여 정수나 실수로 변환할 수도 있지만 너무 번거롭기 때문에 Scanner 객체를 이용하여 바이

2.4 수식과 연산자수식: 프로그램에서 어떤 계산을 할 때 사용한다.1) 피연산자2) 연산자연산자우선순위가 존재한다.산술 연산 \+ \- \* / %증감 연산자 \++x x++ \--x x--복합 대입 연산자 \+= \-= \*= /= %=관계 연산자 == !
클래스는 자바와 같은 객체 지향 언어의 기본적인 빌딩 블록이다. 클래스들이 모여서 하나의 자바 프로그램이 된다.메소드는 특정한 작업을 수행하는 코드의 묶음이다.문장은 사용자가 컴퓨터에게 작업을 지시하는 단위이다.변수는 데이터를 담아두는 상자로 생각할 수 있다.자바의 자
3.2 switch 문< 향상된 switch 문 >java 12부터는 "화살표"를 사용하는 switch문을 사용할 수 있다.switch (day) { case "SAT", "SUN" -> today = "주말"; case "MON", "TUS", "WED",

3.4 while 문do-while 문: 조건을 검사하기 전에, 블록 안의 문장을 실행한다. (while문과의 차이점)break 문: 실행되면 현재의 반복문을 벗어나게 된다.continue 문: 반복문에서 현재의 반복을 건너뛰어서 다음 반복으로 넘어가게 한다.

3.5 배열배열: 여러 개의 변수를 하나로 묶어 넣은 것이다.배열의 요소들은 인덱스라 불리는 번호가 붙어있고, 이 번호를 통하여 배열 요소에 접근할 수 있다. < 배열의 선언과 사용 >\*자바에서 배열은 "객체"이다.1\. 배열 참조 변수부터 다음과 같이 선언한다

3.6 2차원 배열int s = new int 3;\-2개의 대괄호가 2차원 배열을 나타낸다.\-행의 개수 열의 개수< 2차원 배열의 초기화 >\*1차원 배열의 경우와 마찬가지로 초기화 리스트가 존재하는 경우에는 new 연산자를 사용할 필요가 없다.레그드 배열\

3.7 ArrayList&전통적인 배열의 가장 큰 약점은 배열의 크기인데, 크기가 한 번 결정되면 절대 변경할 수 없다는 점이다.이 약점을 보완할 수 있는 방법이 바로자바에서 제공하는 ArrayList라는 클래스이다.=> 이 클래스를 사용하면 배열의 크기를 동적으로 변
조건문에는 if-else문, switch문이 있다.switch 문의 case 절에는 정수, 문자, 문자열이 올 수 있다.배열은 같은 자료형의 데이터 여러 개를 순차적으로 저장하는 자료 구조이다.자바에서 배열은 객체이다.배열을 생성하려면 먼저 "참조 변수"부터 선언한다.

4.1 객체 지향 프로그래밍이란?객체1) 상태 속성2) 동작 기능1)과 2)는 소프트웨어에서 각각 필드와 메소드로 표현할 수 있다.객체 안의 변수 = 필드객체 안의 함수 = 메소드< 프로그래밍 기법의 발전 >어셈블리 -> 절차지향 -> 객체지향 -> 함수형절차 지

4.2 클래스와 객체 만들기•클래스: 객체에 대한 설계도•인스턴스: 클래스로부터 만들어지는 각각의 객체< 클래스 작성 >public class 클래스 이름 { 자료형 필드1; <- 필드 자료형 필드2; ... 반환형 메소드1() {

4.3 생성자와 메소드 오버로딩메소드 오버로딩: 같은 이름의 메소드가 여러 개 존재하는 것. (=중복정의)다형성을 구현하는 한 가지 방법이 된다.\-각각의 메소드가 가지고 있는 매개 변수는 달라야 한다.생성자: 객체가 생성될 때 객체를 초기화하는 특수한 메소드.\-생성

4.4 접근 제어•접근 제어: 클래스의 멤버에 접근하는 것을 제어하는 것.< 자바의 접근 제어 지정자 >1) public 2) protected 3) 없음 4) private < 접근자와 설정자 >\-정보 은닉의 개념에서 구현의 세부 사항을 클래스
4.5 무엇을 클래스로 만들어야 할까?
객체는 속성과 동작으로 정의된다.프로그램에서는 속성은 필드로, 동작은 메소드로 구현된다.클래스는 필드와 메소드로 구성된다.자바에서는 new를 사용하여 객체를 생성한다.객체를 생성하기 전에 반드시 객체를 참조하는 변수를 먼저 선언하여야 한다.메소드 오버로딩이란, 이름은

5.1 객체의 생성과 소멸< 참조 변수와 대입 연산 >\-기초 변수와 참조 변수는 대입 연산에서 다르게 동작한다.1) 기초 변수 : 변수의 값을 복사한다.2) 참조 변수 : 참조값을 복사한다.Ex) Television tv1 = new Television();

5.2 인수 전달 방법\-메소드를 호출할 때, 우리는 메소드(함수)로 데이터(인수)를 전달할 수 있다.\*기본적으로 전달되는 방법은 값에 의한 호출(call-by-value)이다. 인수의 값이 복사되어 매개 변수로 전달된다.1) 기초형 값이 전달되는 경우2) 객체
5.3 정적 멤버 -여러 개의 객체가 하나의 변수를 공유해야 되는 경우 => 정적 멤버 or 클래스 멤버 필드 정의 시 static을 붙이면 정적 멤버가 된다. 메소드 정의 시 static을 붙이면 정적 메소드가 된다. 클래스의 멤버 1) 변수 2) 메소드 다음

5.4 객체 배열class Rect { int width, height;}\-객체 배열을 생성하려면 먼저 배열을 생성한 후에 각각의 배열 요소를 별도로 생성하여 저장해야 한다.public class RectArrayTest { public static void main
객체가 자신을 가리키는 참조값을 잃으면 사용이 불가능해진다.이런 객체들은 정리 대상을 표시되며나중에 가용 메모리가 부족해지면 가비지 컬렉터에 의해 삭제된다.메소드로 기초형의 값을 전달하면 복사되지만,메소드에 객체를 전달하면 객체의 참조값이 전달된다.=> 메소드 안에서
6.1 상속 상속 : 기존에 존재하는 클래스로부터 필드와 메소드를 이어받고, 필요한 기능을 추가할 수 있는 기법이다. •소프트웨어의 재사용이 가능해진다. •코드의 중복을 줄일 수 있다. -자바에서는 extends 키워드를 이용하여 상속을 나타낸다. •부모 클래스(슈

6.2 상속과 접근 지정자자식 클래스가 상속받는 것•public 멤버•protected 멤버•디폴트 멤버자식 클래스가 상속받지 않는 것•private 멤버=> 부모/자식 클래스만 사용하는 멤버는 protected로 지정하면 편리하다. (그외 외부 클래스는 사용 불가)
6.3 상속과 생성자
6.4 메소드 오버라이딩 메소드 오버라이딩 : 자식 클래스가 부모 클래스의 메소드를 자신의 필요에 따라 재정의하는 것이다. 1) 메소드의 이름 2) 매개 변수 3) 반환형 이 동일하여야 한다. -부모 클래스의 메소드와 자식 클래스의 메소드가 완벽하게 일치하지 않으면
6.5 다형성 다형성 : 일반적으로 객체지향 프로그래밍에서 다형성이란 객체들이 똑같은 메시지를 받더라도 각자의 실제 타입에 따라서 서로 다른 동작을 하는 것을 말한다. -메소드 오버로딩 -메소드 오버라이딩 -제네릭 프로그래밍 을 포함한다. 업캐스팅 : 부모 클래스
6.6 상속 vs 구성•구성: 다른 클래스의 인스턴스를 클래스의 필드로 가지는 디자인 기법. 1) has-a 관계 2) 여러 클래스에서 코드를 재사용 가능 3) 실행 시간에 결정될 수 있음 4) final로 선언된 클래스에서도 코드 재사용이 가능 5) 아무것도
상속을 이용하면 여러 클래스에 공통적인 코드들을 하나의 클래스로 모을 수 있어서 코드의 중복을 줄일 수 있다.자식 클래스는 부모 클래스의 public 멤버, protected 멤버, 디폴트 멤버(같은 클래스 내부에 있다면)를 상속받는다.(부모 클래스의 생성자) -> (
07 추상 클래스, 인터페이스, 중첩 클래스7.1 추상 클래스추상클래스: 완전하게 구현되어 있지 않은 메소드를 가지고 있는 클래스 \-객체 생성 불가(이유: 메소드 미완성)\-하나 이상의 추상 메소드를 가지고 있어야 한다.\-추상 메소드는 항상 세미콜론(;)으로 종료되
추상 클래스는 추상 메소드를 하나라도 포함하고 있어야한다. 추상 클래스를 상속받은 경우 반드시 (하나 이상의)추상 메소드를 재정의해주어야 한다. 일반 클래스 ->객체 생성O ->상속한 후 제약X 추상 클래스 ->객체 생성X ->추상 메소드로 정의한 것은 자식 클래

7.2 인터페이스•하드웨어에서의 인터페이스 : 서로 다른 장치들이 연결되어서 상호 데이터를 주고받는 규격자바 인터페이스 정의: 여러 프로그래머들이 독립적으로 작성한 클래스를 한데 모아 하나의 소프트웨어를 완성하기 위한 상황에서, 클래스끼리의 상호작용을 기술하기 위한 일
7.3 인터페이스를 이용한 다중 상속==> 다른 프로그래머들이 사용하고 있던 인터페이스를 변경시키면, 이 인터페이스를 구현하였던 모든 클래스가 동작하지 않게 된다.\-해결방법 :상속을 받아서 확장시키면 된다.Ex)다중 상속: 하나의 클래스가 여러 개의 부모 클래스를 가
7.4 디폴트 메소드와 정적 메소드Java 8 -> 디폴트 메소드, 정적 메소드 추가Java 9 -> 전용 메소드 추가: 인터페이스 개발자가 메소드의 디폴트 구현을 제공할 수 있는 기능.\-디폴트 메소드가 정의되어 있으면 인터페이스를 구현하는 클래스가 메소드의 몸체를
7.5 중첩 클래스=> 클래스 내 클래스 정의 가능1) 정적 중첩 클래스2) 비정적 중첩 클래스 내부 클래스 지역 클래스 익명 클래스정적 중첩 클래스: 앞에 static이 붙어서 내장되는 클래스비정적 중첩 클래스: static이 붙지 않은 일반적인 중첩 클래
7.6 익명 클래스: 몸체는 정의되지만, 이름이 없는 클래스\-클래스 정의와 동시에 객체 생성\-이름이 없기 때문에 한 번만 사용 가능\-하나의 객체만 생성하면 되는 경우에 많이 사용함•사용 방법1) 부모 클래스에서 상속을 받아서 작성2) 인터페이스를 구현하여서 작성비
인터페이스를 이용하면 다중 상속의 효과를 낼 수 있다.인터페이스 안에는 필드가 없기 때문에, 다중 상속에서 발생하는 복잡한 문제가 발생하지 않는다.디폴트 메소드는 인터페이스 개발자가 메소드의 디폴트 구현을 제공할 수 있는 기능이다.디폴트 메소드가 정의되어 있으면, 인터

자바 내장 패키지 Java 자바 패키지 lang util awt 서브 패키지 System.class Map.class Button.class String.class ArrayList.class 패키지 : 관련있는 클래스나 인터페이스를 하나로 묶는 것이다
8.2 패키지 선언하기 •방법 : package 패키지 이름; 을 파일의 맨 처음에 넣으면 된다. -> 반드시첫 문장이어야 한다. (그래야 JVM이 확인 가능) *JVM이 패키지를 확인하는 건 코드의 첫 문장에 패키지명을 명시해두어야 가능하다. 외부 패키지의 멤버
8.3 패키지 사용하기•사용법1) 완전한 이름으로 참조한다. (=>패키지 이름이 클래스 앞에 붙은 것)2) 패키지 내에서 우리가 원하는 클래스만을 포함한다.3) 패키지 안의 모든 클래스를 포함한다.\-같은 패키지 내라면 클래스 이름만 가지고 클래스를 참조하는 것이 가능
8.4 클래스 파일은 언제 로드될까? -자바 소스 파일이 컴파일되면 클래스 파일로 변환되고, 파일 시스템에 저장된다. 클래스 파일은 자바 가상 머신에 의하여 로드된다. 클래스 파일은 언제 로드되는 것일까? 1) 클래스 파일은 요청 시 JVM에 로드된다. => 지
8.5 자바 API 패키지 자바 AP
8.6 Object 클래스\-자바에서는 클래스를 정의할 때 명시적으로 부모 클래스를 선언하지 않으면 Object 클래스가 부모 클래스가 된다.public boolean equals(Object obj): obj가 이 객체와 같은지를 검사한다.public String t
8.7 랩퍼 클래스& 자바에서는 기초 자료형을 제외하고는 모든 것이 객체로 되어 있다.하지만 어떤 경우에는 기초 자료형도 객체로 포장하고 싶은 경우가 있다.ex) 객체만을 저장하는 벡터(vector)에 기초 자료형을 넣고 싶은 경우이때 랩퍼 클래스(Wrapper Cla

8.8 String 클래스\-String 클래스는 문자열을 구성하는 문자들을 내부에 저장한다.\-String 안에 저장된 문자에는 인덱스가 존재한다.: 자바에서 객체를 생성하는 유일한 방법은 new를 사용하는 것이다.하지만 문자열은 프로그래밍에서 아주 많이 사용되기
8.9 기타 유용한 클래스Math 클래스: 기본적인 수치 연산을 위한 메소드 제공.Random 클래스: Random 클래스의 객체는 난수를 발생하는 데 사용.\-48비트 길이의 시드(seed)를 사용하며 알고리즘으로는 변형된 선형 합동 수식을 이용한다.=> 동일한 시드

8.10 예외 처리란?예외(exception): exceptional event의 약자.\-일반적인 경우, 오류가 발생하면 프로그램이 종료된다.그러나 무조건 종료하는 것보다 프로그램에서 오류를 감지하여 자연스럽게 프로그램을 종료하거나, 오류를 처리한 후에 계속 실행할
패키지는 관련 있는 클래스들을 하나로 묶은 것이다.패키지를 사용하는 방법에는 3가지 방법이 있다.1) 완전한 이름으로 참조2) 패키지 안에서 원하는 클래스만을 포함3) 패키지 안의 모든 클래스를 포함JAR 파일을 사용하여 자바 파일들을 압축하여 하나의 파일로 만들 수

9.1 자바 GUI 소개& 지금까지의 프로그램들은 모두 콘솔-기반이었다. (콘솔-기반이란 명령 프롬프트와 같이 텍스트만을 사용하여 사용자가 대화하는 것)\-객체로 만들어짐. (=GUI 컴포턴트) ex) 버튼, 체크박스, 콤보박스 '위젯'이나 '컨트롤'이라고도 부름

9.2 자바 GUI 기초: 다른 컴포넌트를 내부에 넣을 수 있는 컴포넌트\-단순 컴포넌트와 컨테이너 컴포넌트로 나누어짐.: 절대 다른 컨테이너 안에 포함될 수 없는 컨테이너를 의미한다.ex) JFrame, JDialog, JApplet 등1) 컨테이너 생성2) 컴포넌트

9.3 컨테이너 살펴보기 JFrame 클래스 -JFrame은 수많은 조상 클래스들을 가지고 있다. (조상 클래스가 제공하는 속성과 메소드들은 자식 클래스가 사용할 수 있다.) •구성 -프레임 : 윈도우 자체 -메뉴바 : 메뉴를 부착할 수 있는 공간 -컨텐트 페인 :
9.4 배치 관리자 배치 관리자 : 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 관리하는 객체 (1) new 연산자를 이용하여 배치 관리자 객체를 만든다. (2) 이 객체를 컨테이너의 setLayout() 메소드를 사용하여 배치 관리자로 지정한다. -컴포넌트
9.6 기초 컴포넌트들\-자바 GUI 애플리케이션에서 많이 사용하는 컴포넌트레이블 - 텍스트를 표시할 수 있는 공간텍스트필드 - 사용자가 한 줄의 텍스트를 입력할 수 있는 공간버튼 - 클릭되면 어떤 동작을 실행하는 버튼: 텍스트를 표시하기 위한 컴포넌트\-텍스트와 이미
자바에서 GUI를 위한 패키지에는 AWT, 스윙 등이 있다.스윙은 경량 컴포넌트들로 구성된 GUI로서 운영체제가 다르더라도 동일한 모양을 지원한다.AWT는 java.awt 패키지로 제공되고, 스윙은 javax.swing 패키지로 제공된다.JFrame은 최상위 컨테이너로
10.1 이벤트 처리 개요: 이벤트가 발생하면 적절한 처리를 해주는 프로그래밍 방식=> 이벤트에 의해 실행 순서가 결정됨.: 사용자가 버튼을 클릭한다거나 마우스를 움직이거나 키를 누르면 발생한다.\*이벤트가 발생하면 이벤트 객체가 생성된다.=> 이 객체는 이벤트에 대한
10.2 이벤트 처리 방법& 이벤트를 처리하려면 리스너 클래스를 작성하여야 한다.\-> 리스너 클래스를 작성하는 위치에 따라서 여러 가지의 방법이 존재한다.1) 내부 클래스가 이벤트를 처리하는 방법2) 외부 클래스가 이벤트를 처리하는 방법3) 프레임 클래스가 이벤트를
10.3 스윙 컴포넌트의 이벤트\-스윙 컴포넌트가 발생하는 이벤트는모든 컴포넌트가 공통적으로 지원하는 저수준 이벤트와일부 컴포넌트만 지원하는 의미적 이벤트로 나눌 수 있다.\-모든 컴포넌트에서 발생된다.ex) 마우스나 키보드로부터 발생되는 이벤트\-일부 컴포넌트에서만
10.4 키 이벤트: 사용자가 키보드를 이용하여 입력을 하는 경우에 발생한다.keyPressd 이벤트: 사용자가 키를 누르면 이벤트가 발생한다.keyReleased 이벤트: 사용자가 키에서 손을 떼면 이벤트가 발생한다.keyTyped 이벤트: 입력된 유니코드 문자가 전
10.5 Mouse와 MouseMotion 이벤트\-사용자가 마우스 버튼을 누르거나 마우스를 움직일 때 발생한다.\*마우스에서 발생하는 이벤트는 8가지이다.\-> 5가지는 MouseListener 안에 정의\-> 2가지는 MouseMotionLisner 안에\-> 1가
10.6 어댑터 클래스: 인터페이스를 구현해놓은 클래스\-이를 상속받아 원하는 메소드만을 재정의하는 것이 가능하다.\-개발자가 사용하지 않는 메소드들 모두 구혆하여야 함\-필요한 메소드만 오버라이드1\. 인터페이스를 구현할 때 모든 메소드를 다 구현하지 않아도 되도록
이벤트 구동 프로그래밍이란 이벤트의 발생에 의하여 프로그램의 실행 흐름이 결정되는 프로그래밍 방식이다. (자바의 GUI프로그래밍)이벤트 소스는 이벤트를 발생하는 컴포넌트이다.이벤트 리스너란 이벤트를 받아서 처리하는 객체이다.이벤트 객체는 이벤트 리스너에 전달되는 객체로
11.1 스윙 컴포넌트 소개\-스윙 컴포넌트는 윈도우 기반 응용 프로그램을 만드는 데 사용되는 JFC의 일부이다.\-JFC는 데스크탑 애플리케이션 개발을 쉽게 하는 GUI 컴포넌트들의 집합이다.\-스윙 컴포넌트는 AWT API를 기반으로 하며, 완전히 자바로 작성되었다
11.3 텍스트 필드와 텍스트 영역=> 10장에서 함: 여러 줄의 텍스트가 들어갈 수 있다.=> 생성자의 매개 변수는 텍스트 영역의 행과 열이다.\-> 텍스트를 가져오려면 getText()\-> 텍스트를 넣으려면 getText()\-> 텍스트를 추가하려면 append(
11.4 체크 박스: 사용자가 클릭하여서 체크된 상태와 체크되지 않은 상태 중의 하나로 만들 수 있는 컨트롤이다.\-생성하기 위해서 JCheckBox 클래스를 사용한다.\-> 생성자에서 초기 상태를 주지 않으면 체크되지 않은 체크 박스가 생성된다.\-> 체크된 상태를
11.5 라디오 버튼: 하나의 그룹 안에서 한 개의 버튼만 선택할 수 있다.\-만들기 위해 두 개의 클래스를 이용한다.JRadionButton: 라디오 버튼 생성 시 사용한다.ButtonGroup: 버튼들을 그룹핑하는 데 사용한다.\-버튼이 눌리는 순간 어떤 작업을 실
11.6 콤보 박스: 여러 항목 중에서 하나를 선택하는 데 사용한다.\-텍스트 필드와 리스트의 결합이다.=> 콤보 박스에 텍스트를 직접 입력할 수도 있고, 리스트에서 선택할 수도 있다.\*텍스트 필드를 편집 불가로 해놓는 경우에는 사용자는 리스트에서 선택만 할 수 있다
11.7 메뉴 붙이기\-메뉴는 다른 컴포넌트와는 달리 컨테이너 안에 배치되지 않는다.\-메뉴는 메뉴바에 나타나거나 팝업 메뉴로만 나타난다.\-메뉴바는 윈도우 상단에 위치하면서 여러 개의 메뉴를 가지고 있다.\-팝업 메뉴는 사용자가 팝업이 가능한 컴포넌트 위에서 마우스
11.8 슬라이더: 사용자가 특정한 범위 안에서 하나의 값을 선택할 수 있는 컴포넌트.: JSlider 클래스의 생성자를 호출해야 한다.ex) 0~100의 범위를 가지고 초기값이 50인 슬라이더의 생성슬라이더의 장식\-슬라이더의 값이 변경되었을 경우,이벤트를 받고 싶으
스윙 컴포넌트들은 계층적인 구조로 되어 있다.거의 모든 스윙 컴포넌트의 부모 클래스는 JComponent이다.Item 이벤트는 체크바스가 선택되거나 해제될 때 발생한다.Change 이벤트는 컴포넌트에 어떤 변화가 일어날 때 발생하는 이벤트이다.JList는 여러 개의 아
13.1 제네릭 프로그래밍: 다양한 종류의 데이터를 처리할 수 있는 클래스와 메소드를 작성하는 기법.\*Object 타입의 변수를 사용하는 것보다 안전하고 사용하기 쉽다.ex) ArrayList 클래스ArrayList는 어떤 종류의 객체도 저장할 수 있는 배열이다.제네
13.2 컬렉션이란?: 자료를 저장하기 위한 구조종류: 리스트, 스택, 큐, 집합, 해쉬 테이블 등\-컬렉션은 제네릭 기법으로 구현되어 있기 때문에 어떠한 타입의 데이터도 저장할 수 있다.크기가 고정인 배열의 단점을 보완한, 가변 크기를 지닌 벡터를 사용하면 리스트를
13.3 벡터: 가변 크기의 배열을 구현한다.\-메소드\-Vector 객체를 생성할 때 new Vector이라고 하면 문자열 객체만을 저장하는 vector를 생성할 수 있다.
13.4 ArrayList ArrayList : 가변 크기의 배열을 구현하는 클래스 Vector와의 차이점 Vector - 스레드 간의 동기화를 지원. Arraylist - 동기화를 하지 않음. => 멀티 스레드 상황이라면 vector를 사용하는 것이 좋다. -
13.5 LinkedList\-데이터의 삽입이나 삭제가 빈번하게 발생하는 경우에는 사용하는 것이 좋다.\-위치를 가지고 원소를 접근한다면 ArrayList가 낫다.ArrayList\-> 리스트의 각각의 원소를 위해 노드 객체를 할당할 필요가 없다.\-> 많은 원소를 동