본문 바로가기

프로그래밍/Java

(66)
Java_애너테이션·어노테이션(annotation) - 애너테이션(annotation) : 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 주석처럼 프로그래밍 언어에 영향을 미치지 않으면 유용한 정보를 제공한다. - 표준 애너테이션 @Override : 메서드 앞에만 붙을 수 있는 애너테이션으로, 조상의 메서드를 오버라이딩 할 때 사용한다. class Fruit { void fruitMethod() {} } class Apple extends Fruit { @Override void ffruitMethod() {} //컴파일 에러. 스펠링이 잘못됨. } → 오버라이딩 할 때 메서드의 이름을 잘못 작성하는 경우가 있는데 컴파일러는 이를 오타로 인식하는 것이 아닌 새로운 메서드가 추가된 것으로 인식한다. 이 때, 오버라이드 ..
Java_열거형(enum)_열거형의 정의와 사용, 열거형의 조상, 열거형에 멤버 추가 - 열거형(enum) : 열거형은 여러 상수를 선언해야 할 때, 편리하게 선언할 수 있는 방법이다. class Card { static final int CLOVER=0; static final int HEART=1; static final int DIAMOND=2; static final int SPADE=3; static final int TWO=0; static final int THREE=1; static final int FOUR=2; final int kind; final int num; } → 일반적으로 상수를 선언할 때 static final을 붙여 사용하는데, 이처럼 상수가 많을 때는 코드가 불필요하게 길어진다. 이럴 때, 열거형을 이용하면 간단히 상수를 선언할 수 있다. class Ca..
Java_제네릭스·지네릭스(2)_제네릭스의 제약, 와일드 카드, 제네릭 메서드, 제네릭 타입의 형변환 - 제네릭스의 제약 static 멤버에 타입변수 사용불가. class Box { static T item;//에러 static int compare(T t1, T t2) {...}//에러 ... } → 모든 객체에 동일하게 동작해야하는 static멤버에 타입 변수 T를 사용할 수 없다. T는 인스턴스 변수로 간주되기 때문이다. 알다시피 static멤버는 인스턴스변수를 참조할 수 없다. 배열 생성할 때 타입변수 사용불가, 타입 변수로 배열 선언은 가능. class Boc { T[] itemArr; //OK. T타입의 배열을 위한 참조변수 ... T[] toArray(){ T[] tmpArr=new T[itemArr.length]; //에러. 지네릭 배열 생성불가. ... return tmpArr; } ....
Java_제네릭스·지네릭스(1)_타입 변수, 제네릭스 용어, 제네릭의 타입과 다형성, Iterator<E>, HashMap<K,V>, 제한된 제네릭 클래스 제네릭스(Generics) : 제네릭스란 컴파일시 타입을 체크해주는 기능이다. -> 타입의 안정성을 높이고 형변환의 번거로움을 줄여준다. 예를들어 아래와 같이 ArrayList를 생성할 때, 저장할 객체의 타입을 저장해주면 지정한 타입 외에 다른 타입의 객체가 저장되면 에러가 발생한다. //Tv객체만 저장할 수 있는 ArrayList를 생성. ArrayList tvList= new ArrayList(); tvList.add(new Tv());//Ok. tvList.add(new Audio());//컴파일 에러. Tv외에 다른 타입은 저장 불가. → 그리고 저장된 객체를 꺼낼 때는 형변환할 필요가 없어서 편리하다. 이미 어떤 타입의 객체들이 저장되어 있는지 알고 있기 때문이다. - 타입 변수 : 클래스를 ..
Java_컬렉션프레임웍(7)_Collections의 메서드(동기화, 변경불가, 싱글톤, 단일 컬렉션), 컬렉션 클래스 정리 ⑩ Collections의 메서드 Collections의 메서드 - 동기화(synchronized) : Vector와 Hashtable과 같은 구버전 클래스들은 자체적으로 동기화 처리가 되어 있는데, 멀티쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 된다. 그래서 새로 추가된 ArrayList와 HashMap과 같은 컬렉션은 동기화를 자체적으로 처리하지 않고 필요한 경우에만 java.util.Collections클래스의 동기화를 이용해서 동기화처리가 가능하다. 동기화가 필요할 때 해당하는 것을 사용하면 된다. static Collection synchronizedCollection(Collection c) static List synchronizedList(List li..
Java_컬렉션프레임웍(6)_HashMap과 Hashtable ⑨ HashMap과 Hashtable Map인터페이스 : 순서X, 중복 - 키X, 값O - HashMap 소스 일부 public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { transient Entry[] table; ... static class Entry implements Map.Entry { final Object key; Object value; ... } } → HashMap은 Entry라는 내부 클래스를 정의하고, 다시 Entry타입의 배열을 선언하고 있다. → 키와 값은 별개의 값이 아니라 서로 관련된 값이기 때문에 각각 배열로 선언하기 보다는 하나의 클래스로 정의해서 하나의 배열로 다루는 것이 더 ..
Java_컬렉션프레임웍(5)_TreeSet ⑧ TreeSet (중복X, 순서유지X) : 범위 검색과 정렬에 유리한 컬렉션 클래스. (HashSet보다 데이터 추가, 삭제에 시간이 더 걸림.) - 이진 트리(binary tree) class TreeNode { TreeNode left;//왼쪽 자식노드 Object element;//객체를 저장하기 위한 참조변수 TreeNode right;//오른쪽 자식노드 } → 최대 2개의 노드를 연결할 수 있으며 '루트'라고 불리는 하나의 노드에서부터 시작해서 계속 확장해 나갈 수 있다. - 이진 탐색 트리(binary search tree) 모든 노드는 최대 두 개의 자식노드를 가질 수 있다. 왼쪽 자식노드의 값은 부모노드의 값보다 작고 오른쪽 자식노드의 값은 부모노드의 값보다 커야한다. 노드의 추가 삭제에..
Java_컬렉션 프레임웍(4)_Comparator와 Comparable, HashSet ⑥ Comparator와 Comparable : 정렬에 필요한 메서드 (정렬기준) Comparable : 기본 정렬기준을 구현하는데 사용 Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용 public interface Comparator { int compare(Object o1, Object o2);//o1과 o2를 비교 boolean equals(Object obj); } public interface Comparable { int compareTo(Object o);//객체 자신(this)과 o를 비교 } → compare()와 compareTo()는 선언형태와 이름이 약간 다를 뿐 두 객체를 비교한다는 기능은 같다. - Comparator와 Comparable 예제 ..