java.util.ArrayList - 배열과 유사하지만 크기가 자동으로 조절된다는 장점이 있는 자료구조 - 배열처럼 데이터를 순차적으로 저장한다. - 모든 데이터를 순차적으로 읽는 속도가 가장 빠른 자료구조이다. 자료구조 (Data Structure) - 데이터를 효율적으로 보관할 수 있는 여러가지 방식들 - 상황마다 데이터를 가장 효율적으로 다룰 수 있는 방법에 대해 연구해놓은 결과물 (데이터 검색, 탐색, 정렬, 추가, 삭제 등) Java Collection Interface - 자바에서 제공하는 자료구조 인터페이스 - Collection은 언제든지 다른 컬렉션으로 쉽게 변환이 가능하다. - Collection 인터페이스를 구현한 클래스로는 List, Set 등이 있다. import java.uti..
인터페이스 (Interface) - 추상 클래스처럼 내부에 추상 메서드를 지닐 수 있다. - 인터페이스 내부에 선언하는 모든 변수들은 자동으로 final static이 된다. - 인터페이스 내부에 선언하는 메서드는 모두 자동으로 abstract public이 된다. - 추상 클래스는 하나밖에 상속받을 수 없지만, 인터페이스는 여러개 구현 받을 수 있다. - 인터페이스를 통해 하나의 클래스가 더욱 다양한 형태를 지닐 수 있게 된다. - 추상 클래스에는 인스턴스 영역이 존재하지만, 인터페이스에는 인스턴스 영역이 아예 없다. package myinterface; public interface Swimmer { // abstract : 자식 클래스로 구현을 미룬다. public abstract void swin..
추상 클래스 (abstract class) - 추상 메서드를 가지고 있는 클래스 - 추상 클래스 내부에는 완성되지 않은 메서드가 들어있으므로 인스턴스를 생성할 수 없다. 추상 메서드 (abstract method) - 선언만 해놓고 구현은 상속받은 자식들에게 미루는 메서드 - 오버라이드를 위한 메서드 - 자식 클래스에게 오버라이드를 강제하는 효과가 있다. import myobj2.DataScienceStudent; import myobj2.Student; public class C16_AbstractClass { public static void main(String[] args) { Student s = new DataScienceStudent(); // 반드시 오버라이드 해야하는 메서드를 쉽게 눈치챌..
final - 변수 앞에 final을 붙이면 이후로는 변경할 수 없는 값이 된다. (상수) - 메서드 앞에 final을 붙이면 오버라이드가 금지된다. - 클래스에 앞에 final을 붙이면 상속이 금지된다. public class C15_Final { public static void main(String[] args) { // 변수 선언 시 앞에 final을 붙여주면 해당 변수는 이후 변경 불가능 final int num = 10; final double GA = 9.80665; final double PI = 3.14; final String GOAT = "메시"; // 나중에 프로젝트가 복잡해졌을 때 실수하는 것을 방지하는 용도 // GA = 123; } }
인스턴스 생명 주기 - 인스턴스가 생성될 때 실행되는 코드의 순서를 알아보자 1. 스태틱 영역 (첫 인스턴스 생성 시에 딱 한 번 실행) 2. 인스턴스 영역 (새 인스턴스 생성 시마다 실행) 3. 생성자 (새 인스턴스 생성 시마다 실행) - 매개변수로 전달 받을 필요 없는 값들 -> 각 영역을 사용 - 생성자의 매개변수로 전달받아서 초기화 해야하는 경우 -> 생성자 public class C14_InstanceLifeCycle { public static void main(String[] args) { TestClass t = new TestClass(); t.doSomething(); for (int i = 0; i < 3; ++i) { t = new TestClass(); t.doSomething()..
지역 내부 클래스 - 클래스는 메서드 내부(Local)에서도 선언할 수 있다. - 해당 메서드 밖에서는 사용할 수 없는 아주 일시적인 클래스 - 메서드가 끝나면 클래스의 수명도 끝난다. 익명 지역 내부 클래스 - 메서드 내부에서 클래스를 바로 상속받아 사용하는 방식 - 클래스 이름을 지정할 수 없기 때문에 익명 클래스라고 부른다. import School.ProgrammingStudent; import School.Student; public class C13_LocalInnerClass { public static void main(String[] args) { Student s = new Student(); // 바로 Student 클래스를 상속받아 마음대로 고쳐버리는 행위 Student s2 = n..
클래스 내부에도 클래스를 만들 수 있다. - 인스턴스 클래스 : 인스턴스 변수에 영향을 받는다. - 스태틱 클래스 : 인스턴스와 무관하다. public class C12_InnerClass { class Bus { int fee; int number; } static class Subway { int fee; int num; } public static void main(String[] args) { // 바깥 클래스의 실체가 생길 때 내부의 클래스를 사용할 수 있게 된다. C12_InnerClass.Bus b = new C12_InnerClass().new Bus(); // 스태틱 클래스는 바깥 클래스의 인스턴스 없이도 사용할 수 있다. C12_InnerClass.Subway s = new C12_In..
접근 제어자 (Access Modifier) - 다른 클래스에서 해당 자원을 사용하려고 할 때 허용 범위를 설정한다. - 같은 패키지의 다른 클래스가 접근할 때 - 다른 패키지의 다른 클래스가 접근할 때 종류 - public : 다른 패키지의 다른 클래스에서도 해당 자원에 자유롭게 접근할 수 있다. - protected : 다른 패키지의 다른 클래스에서 해당 자원에 접근하려면 상속을 받아야 한다. - default : (접근 제어자 미설정) 다른 패키지에서는 접근할 수 없다. - private : 같은 패키지의 다른 클래스에서도 접근할 수 없다. (현재 클래스에서만 사용할 수 있는 자원이 된다.) 용도 - 내가 만든 클래스를 가져다 쓰는 사람이 public 접근 제어자를 지닌 자원에만 접근하는 것을 원하..