Linked list 기존 배열의 연속적인 특성을 띄는 단점을 보완해서 비순차적인 연결 기반의 배열을 생성하는 컬렉션 배열의 장점 - 배열은 구조가 간단하고 데이터를 읽는데 걸리는 시간이 짧다. (접근시간 access time) 배열의 단점 - 크기를 변경할 수 없다. 크기를 변경해야 하는 경우 새로운 배열 생성 후 데이터를 복사해야 함. 크기가 큰 배열을 생성할 경우 메모리가 낭비된다. - 비순차적인 데이터의 추가,삭제에 시간이 많이 걸린다. 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 함. Comparator 와 Comparable Comparable - 기본 정렬기준을 구현하는데 사용 (오름차순, 내림차순 등) Comparable - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사..
Collections Framework 컬렉션즈 프래임워크라는 것은 다른 말로는 컨테이너라고도 부른다. 즉 값을 담는 그릇이라는 의미이다. 그런데 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다. 자바에서는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하는데 이것을 컬렉션즈 프래임워크라고 부른다. 전에 배운 ArrayList는 그중의 하나다. Collection과 Map이라는 최상위 카테고리가 있고, 그 아래에 다양한 컬렉션들이 존재한다. ArrayList는 LIst라는 성격으로 분류되고 있는 것이다. List는 인터페이스이다. 그리고 List 하위의 클래스들은 모두 List 인터페이스를 구현하기 때문에 모두 같은 API를 가지고 있다. 클래스의 취지에 따라서 구현방법과 동작방법은 다르..
Eclipse의 단축키는 Preferences -> General -> Keys 메뉴에서 확인 및 변경이 가능하다. 자주쓰는 단축키 /* Ctrl+shift+O : 코드내의 자동으로 필요한 라이브러리를 전부 import 할 수 있다. Ctrl+shift+F : 코드 자동정렬 기능 Alt+shift+R = 변수명 전체수정 (맥os : option+command+R) Ctrl + F11 : 저장 및 실행 (맥os : option+fn+F11) */ Ctrl + S : 저장 Ctrl + D : 현재 줄 지우기 Ctrl + J + 검색할 단어 : 검색할 단어를 실시간으로 검색 Ctrl + L : 원하는 줄로 이동 Ctrl + K : 다음 찾기(찾고자 하는 문자열 앞에서 사용하여 Ctrl을 누른 채 K를 반복하여..
제네릭 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 안에 타입변수 또는 타입매개변수를 넣어서 지정해준다 위의 그림은 아래의 코드를 간략화한 것이다. p1.info와 p2.info의 데이터 타입은 결과적으로 아래와 같다. p1.info : String p2.info : StringBuilder 그것은 각각의 인스턴스를 생성할 때 사용한 사이에 어떤 데이터 타입을 사용했느냐에 달려있다. 복수의 제네릭 복수의 제네릭을 사용할 때는 와 같은 형식을 사용한다. 여기서 T와 S 대신 어떠한 문자를 사용해도 된다. 하지만 묵시적인 약속이 있기는 하다. 제네릭은 기본 데이터 타입에서는 사용할 수 없고, 참조 데이터 타입에 대해서만 사용할 수 있다. new I..
Object 자바에서 상속이란 필수적이다. 여러분이 상속하건 하지 않았건 기본적인 상속을 하게 된다. 자바에서 모든 클래스는 사실 Object를 암시적으로 상속받고 있는 것이다. 그런 점에서 Object는 모든 클래스의 조상이라고 할 수 있다. 그 이유는 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서다. ex) class O { } 클래스 O를 정의한다고 가정하면 class O extends Object { } 암시적으로 오브젝트를 상속하는 것과 같다. enum 변수와 상수를 이용할 때 상수는 중복의 가능성이 매우크다. 그러므로 변수에 이름을 지어 활용을 많이 하는편이다. 변수를 많이 활용할 때에는 변수의 이름이 중복되는 문제를 회피하기 위해 앞에 접두사나 언더바를 이용해서 리네임을..
throws API를 사용할 때 설계자의 의도에 따라서 예외를 반드시 처리해야 하는 경우가 있다. 위와 같은 예제가 있다. 내용은 out.txt 파일을 읽어서 그것을 화면에 출력하는 내용이라고만 이해하자 컴파일해보면 밑에와 같은 오류가 발생한다 Unhandled exception type FileNotFoundException 이것은 아래 로직에 대한 예외처리가 필요하다는 뜻이다. 파일리더를 살펴보면 Throws는 한국어로는 '던지다'로 번역된다. 위의 내용은 생성자 FileReader의 인자 fileName의 값에 해당하는 파일이 디렉토리이거나 어떤 이유로 사용할 수 없다면 FileNotFoundException을 발생시킨다는 의미다. 이것은 FileReader의 생성자가 동작할 때 파일을 열 수 없는..
Interface abstract, final과 함께 대표적인 규제로 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 에플리케이션은 컴파일 조차 되지 않는다. 클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 맴버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다. 인터페이스와 상속은 다르다. 상속이 상위 클래스의 기능을 하위 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 인터페이스의 멤버는 반..
클래스패스 (classpath) 옵션 -classpath는 자바를 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할을 한다. -classpath의 값으로 사용된 ".;lib"를 살펴보자 ' . ' - 현재 디렉토리에서 클래스를 찾는다 ' ; ' - 경로와 경로를 구분해주는 구분자 'lib' - 현재 디렉터리에 없다면 현재 디렉터리의 하위 디렉터리 중 lib에서 클래스를 찾는다는 의미다 package - 우리가 일반적으로 사용하는 자바에서의 폴더 디렉토리와 같은 개념으로 생각하면 된다 서로 다른 패키지에 있는 클래스를 가져오려면 import를 통해서 다른 패키지의 클래스를 로드할 수 있다. src (source code) - 소스코드를 저장하는 디렉토리 bin (binary 2진수) - 컴파일..
class멤버와 instance멤버 static - class non static - instance (이 관계를 그림으로 이해하는 편이 좋다) f1의 첫번째 줄은 실제로 값이 존재하지 않고 클래스 첫번째 줄을 가르킨다. 하지만 f1의 첫째줄에 값이 변경되면 가르키는 클래스의 값이 변경되고 그 해당하는 인스턴스의 값이 바뀌는 형태이다. f2의 두번째 줄은 해당 클래스의 값이 있다면 복제가 되지만 서로 링크되어있지 않은 독립적인 존재여서 f1의 값을 변경해도 클래스는 바뀌지 않는다. 메소드 또한 마찬가지이다. 해석하자면 클래스의 변수를 바꾸면 모든 인스턴스의 변수의 값이 바뀐다. 반대로 인스턴스에서 클래스의 값을 바꾸면 클래스의 값이 바뀌고 그에 해당하는 모든 인스턴스의 값이 바뀐다. static을 맴버(..