Java-익명클래스, API클래스, 컬렉션, 제네릭
제어자 조합
- 메소드는 static과 abstract가 함께 사용될 수 없다. → static메소드는 {}블록이 있어야만 사용가능
- 클래스는 abstract와 final이 함께 사용될 수 없다. → final은 더이상 불변이고 abstract는 무조건 오버라이딩되어야하기 때문에 서로 모순됨.
- 추상메소드의 접근제어자는 private일 수가 없다. → 추상메소드는 실현클래스에서 재정의 되어야하는데 private이 붙어버리면 다른 클래스에서 접근을 할 수 없기때문이다.
- 메소드는 private과 final이 같이 사용될 필요가 없다. → 둘 중 하나만 써도 의미가 충분
익명 클래스 (=무명 클래스)
- 클래스 몸체는 정의되고 이름이 없는 클래스
- 클래스를 선언하면서 동시에 객체를 생성
- 코드의 양을 줄일 수 있음.
- 이름이 없기 때문에 생성자도 가질 수 없음. 둘 이상의 인터페이스를 구현할 수 없음.
interface Remoteable { void turnOn(); void turnOff(); } public class AnonymousClassTest { public static void main(String[] args) { Remoteable rc = new Remoteable() { @Override public void turnOn() { System.out.println("켜"); } // 인터페이스 구현 @Override public void turnOff() { System.out.println("꺼"); } // 인터페이스 구현 }; } }
자바 API 클래스
- 프로그램에서 자주 사용되는 클래스 및 인터페이스 모음
- System 클래스
- 자바프로그램은 운영체제상에서 바로 실행되지 않고 JVM위에서 실행됨.
- 따라서 운영체제의 모든 기능을 자바코드로 직접 접근하기 어려움.
- System클래스를 이용하면 운영체제의 일부기능 사용 가능.
System.currentTimeMillis(); // 컴퓨터 시계로부터 현재 시간을 읽어서 밀리세컨 단위로 리턴 System.nanoTime(); // 컴퓨터 시계로부터 현재 시간을 읽어서 나노세컨 단위로 리턴 System.getProperty("os.name");
- Class 클래스
- 클래스와 인터페이스의 메타데이터
- String 클래스
String s1 = new String("김명관"); s1.charAt(0); // 0번째 문자열 추출 s1.equals("김명관"); // 주소값의 문자열과 매개변수 문자열이 같은지 여부 String str = "자바에요"; str.replace("자바", "java"); // 앞에있는 문자열을 뒤에 있는 문자열로 대체 s1.indexOf("명관"); // 찾으려는 문자열 제일 앞에 있는 하나의 문자의 위치 리턴 String ssn = "950930-1236456"; ssn.substring(0, 6); // 0번째에서 6번째 문자열을 자른 나머지 문자열을 리턴 String ss = "명관,수진,지후,민경,유진"; ss.split(","); // ,를 기준으로 문자열을 나눠서 배열에 저장할 때 쓰임. String [] ssArray = ss.split(","); for (String e : ssArray) { System.out.println(e); }
- StringTokenizer 클래스
StringTokenizer st = new StringTokenizer("hello world welcome to hell"); st.hasMoreTokens(); while(st.hasMoreTokens()) { System.out.println(st.nextToken()); }
- StringBuffer 클래스
- 낭비를 줄여주기위한 클래스
StringBuffer sb = new StringBuffer(); String str3 = sb.append("hello").append("world").toString(); System.out.println(str3);
- 낭비를 줄여주기위한 클래스
- Wrapper 클래스
- 기초자료형 객체로 포장해주는 클래스
- Integer 클래스
- 기초자료형 int를 객체로 포장해줌.
int i = 20; // 기초자료형 - 기능이 없음
Integer i2= new Integer(20); // 박싱 : 기본타입 -> 포장객체
i2.intValue();// int값 리턴 // 언박싱 : 포장객체 -> 기본타입
int i3 = Integer.parseInt("902"); // 받아온 문자열을 int형으로 바꿔주는 static메소드
String sss = i2.toString(); // 기초 자료형 -> 박싱 -> 문자열
- Date 클래스
- 날짜를 표현해주는 클래스
Date d = new Date();
Date d2 = new Date(System.currentTimeMillis());
System.out.println(d2);
System.out.println(d2.getDate());
컬렉션
- 어떻게하면 자료구조를 잘 저장할까?
- 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util패키지에 컬렉션 관련한 인터페이스와 클래스를 포함시켜 놓음.
- 컬렉션 종류
- List : 순서가 있는 데이터 집합을 의미
- stack : 순서가 있는 데이터집합을 LIFO방식으로 관리하는 자료구조
- queue
- set
- map
- List 인터페이스 - 이걸 구현한 클래스는 두 개 → ArrayList 클래스, LinkedList클래스
- ArrayList 클래스 : 데이터가 삽입, 삭제될 때마다 새로운 배열 생성 (검색이 많이 발생하는 자료는 ArrayList 자주 씀)
// ArrayList 객체 생성
ArrayList<String> list = new ArrayList<String>();
// 리스트에 자료 추가
list.add("양파");
list.add("당근");
list.add("쪽파");
list.get(0); // get(인덱스)-> 해당 인덱스 값 가져오기.
System.out.println(list.get(0));
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
list.set(1, "상추"); // 인덱스값을 뒤의 문자열로 수정
System.out.println(list); // list 안에 toString이 설정되어 있어서 바로 나옴.
- LinkedList클래스 : 데이터가 삽입, 삭제될 때마다 해당 칸만 추가/삭제하고 기억하고 있는 위치만 변경 (수정이 많이 일어나는 자료는 LinkedList 자주 씀.)
- 위 2개의 차이점 설명하는게 면접에 자주 나온다하네..
제네릭
- 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 재사용하는 프로그래밍 기법
- 제네릭은 컬렉션 라이브러리에 많이 사용
- 객체를 생성할 때 컬렉션에 넣을 타입을 결정
댓글남기기