230 likes | 425 Views
7. 내부 클래스와 유용한 클래스들. 최종명 choijm@dreamwiz.com. 7.1 내부 클래스. 내부 클래스 클래스 내부에 선언된 클래스 종류 멤버 클래스 – 클래스 멤버로 선언된 내부 클래스 지역 클래스 – 함수 내부에 선언된 내부 클래스 무명 클래스 – 이름이 없는 내부 클래스. 7.1 내부 클래스. 멤버 클래스 내부 클래스에서 외부 멤버 필드 / 메소드 접근 외부클래스이름 .this. 멤버필드 외부클래스이름 .this. 메소드 () 예제 : ABC.java.
E N D
7. 내부 클래스와 유용한 클래스들 최종명 choijm@dreamwiz.com
7.1내부 클래스 • 내부 클래스 • 클래스 내부에 선언된 클래스 • 종류 • 멤버 클래스 – 클래스 멤버로 선언된 내부 클래스 • 지역 클래스 – 함수 내부에 선언된 내부 클래스 • 무명 클래스 – 이름이 없는 내부 클래스
7.1내부 클래스 • 멤버 클래스 • 내부 클래스에서 외부 멤버 필드/메소드 접근 외부클래스이름.this.멤버필드 외부클래스이름.this.메소드() • 예제: ABC.java 1 public class ABC { 2 public String msg = "A"; 3 public void print() { 4 BC bc = new BC(); 5 bc.print(); 6 } 8 public class BC { 9 public String msg = "B";
7.1내부 클래스 • 예제: ABC.java (계속) 10 public void print() { 11 C c = new C(); 12 c.print(); 13 } 14 // 멤버 클래스 C 15 public class C { 16 public String msg = "C"; 17 public void print() { … 20 System.out.println(C.this.msg); 21 System.out.println(BC.this.msg); 22 System.out.println(ABC.this.msg);
7.1내부 클래스 • 지역 클래스 • 정의된 메소드에서만 사용 가능 • 예제: LocalClassTest.java 1 class LocalClassTest { 2 private String name; 3 Sayable sayable; 5 public LocalClassTest(String n) { 6 this.name = n; 8 class LocalClass implements Sayable { 9 public void say() { 10 System.out.println("Hello " + name); 11 } 12 } 14 sayable = new LocalClass();
지역 클래스 사용 무명 클래스 사용 7.1내부 클래스 public void doX() { ...... class Y implements Z { 프로그램코드 } Z k = new Y(); } public void doX() { ...... Z k = new Z() { 프로그램코드 }; }
7.1내부 클래스 • 예제: AnonymousClassTest.java 1 class AnonymousClassTest { 2 private String name; 3 Greetable greet; 5 public AnonymousClassTest(String n) { 6 this.name = n; 8 greet = new Greetable() { 9 public void say() { 10 System.out.println("Hello " + name); 11 } 12 }; 13 }
7.2 static과 final의 의미 • final 키워드 • final 키워드는 클래스, 메소드, 멤버 필드에 기술할 수 있다. • Final 클래스 • 다른 클래스의 부모 클래스가 될 수 없다. • Abstract 키워드와 같이 사용될 수 없다. • Final 메소드 • Final 메소드는 재정의(override)될 수 없다 • Final 멤버 필드 • Final 멤버 필드는 값을 변경할 수 없다.
7.2 static과 final의 의미 • static 키워드 • 멤버 필드와 메소드 앞에 기술할 수 있다. • Static 멤버 필드 • 객체들간의 전역 변수로 사용된다. • 다음과 같은 형태로 사용된다. 클래스이름.멤버필드 • Static 메소드 • 다음과 같은 형태로 사용된다. 클래스이름.메소드() • Static 메소드에서는 this, super를 사용할 수 없다.
7.2 static과 final의 의미 • 예제: CPU.java 1 public class CPU { 2 public static int serialNo = 0; 3 protected String name; 4 protected int mynum; 6 public CPU(String name) { 7 this.name = name; 8 mynum = serialNo; 9 serialNo = serialNo + 1; 10 } 12 public void print() { 13 System.out.println(name + "[" + mynum + "]"); 14 }
7.2 static과 final의 의미 • 예제: CPUMaker.java 3 CPU kims, lees; 4 5 kims = new CPU("펜티엄5"); 6 lees = new CPU("펜티엄5"); 7 kims.print(); 8 lees.print(); 9 System.out.println("kims.serialNo = " + kims.serialNo); 10 kims.serialNo = 100; 11 System.out.println("kims.serialNo = " + kims.serialNo); 12 System.out.println("lees.serialNo = " + lees.serialNo); 13 System.out.println("CPU.serialNo = " + CPU.serialNo);
7.3 배열 • 배열 선언 자료형 변수 []; 자료형[] 변수; • 배열 선언과 생성 자료형 변수 [] = new 자료형[크기]; 자료형[] 변수 = new 자료형[크기]; • 배열 초기화 int[] k = { 1, 2, 3 };
7.3 배열 • 예제: Guass.java 1 class Gauss { 2 public static void main(String[] args) { 3 int[] ia = new int[101]; 4 for (int i = 0; i < ia.length; i++) { 5 ia[i] = i; 6 } 7 int sum = 0; 8 for (int i = 0; i < ia.length; i++) { 9 sum = sum + ia[i]; 10 } 11 System.out.println(sum);
7.3 배열 • 다차원 배열 • []를 여러 개 사용함으로써 다차원 배열 선언 • 예: • 초기화 int t[][] = new int[2][3]; t[0][0] = 1; … t[1][2] = 6; int t[][] = { {1, 2, 3}, {4, 5, 6} };
7.4 문자열 • String 클래스 • 문자열을 표현하기 위해서 사용되는 클래스 • 유용한 메소드들 ▪ char charAt(int index) - index 번째의 문자를 리턴한다. ▪ boolean endsWith(String suffix) - 문자열이 suffix 문자열로 끝나는가 알아본다. ▪ int indexOf(char ch) - ch 문자가 처음 매치되는 곳의 index 값을 리턴한다. ▪ int length(char ch) - 문자열의 길이를 리턴한다. 문자열의 길이는 문자들의 개수를 의미한다. ▪ String replace(char old, char new) - old 문자를 new 문자로 변환해서 String 객체를 리턴한다. ▪ String substring(int beginIndex) - beginIndex부터 끝까지 부분 문자열을 리턴한다.
7.4 문자열 • 예제: StringDemo.java 2 public static void main(String args[]) { 3 String msg = "How are you ?"; 4 String capital; 5 String tmsg; 6 7 System.out.println("msg: " + msg); 8 capital = msg.toUpperCase(); 9 System.out.println("capital: " + capital); 10 tmsg = msg.replace(' ','\t'); 11 System.out.println("tmsg: " + tmsg);
7.5 Math 클래스 • Math 클래스 • 수학 계산을 위해서 사용 • 유용한 메소드들 ▪ public static <type> abs(<type> value) - 매개변수 value 의 절대값을 리턴한다. ▪ public static <type> max(<type> a, <type> b) - a 와 b 중에서 큰 값을 리턴한다. ▪ public static <type> min(<type> a, <type> b) - a 와 b 중에서 작은 값을 리턴한다. ▪ public static double log(double a) - 자연 로그 lna값을 리턴한다. ▪ public static double pow(double a, double b) - ab값을 리턴한다. ▪ public static double sin(double a) - sin(a) 값을 리턴한다. a는 라디안 값이다. ▪ public static double sqrt(double a) - a의 제곱근 값을 리턴한다.
7.5 Math 클래스 • 예제: MathDemo.java 1 public class MathDemo { 2 public static void main(String args[]) { 3 int value = (int) Math.pow(2, 9); 4 System.out.println("2 ^ 9 = " + value);
7.6 Object와 Class 클래스 • Object 클래스 • 모든 클래스의 부모 클래스 • 유용한 메소드들 • Class 클래스 • 자바 클래스를 표현하기 위한 클래스 • 유용한 메소드들 ▪ Class getClass() - Object의 클래스 정보에 대한 Class 객체를 리턴한다. ▪ String toString() - Object를 문자열로 표현하기 위한 String 객체를 라턴한다. ▪ static Class forName(String className) - forName() 메소드는 자바 객체를 new와 생성자를 사용하지 않고도 생성할 수 있는 방법을 제공한다. ▪ String getName() - 클래스 이름을 리턴한다.
7.7 데이터 타입 클래스들 • 데이터 타입 클래스들 • 자바 기본형을 표현한 클래스들
7.8 Vector 클래스 • Vector 클래스 • 크기가 동적으로 변하는 클래스 • 유용한 메소드들 ▪ void add(int index, Object element) - element를 index 위치에 추가한다. ▪ void addElement(Object element) - element를 맨끝 위치에 추가한다. ▪ void remove(int index) - index 위치의 element를 삭제한다. ▪ void removeElement(Object element) - 벡터에서 처음 매칭되는 element를 삭제한다. ▪ Object elementAt(int index) - index 번째의 element를 리턴한다. ▪ int size() - 현재 벡터에 있는 element의 개수를 리턴한다.
7.8 Vector 클래스 • 예제: VectorTest.java 1 import java.util.*; 3 public class VectorTest { 4 public static void main(String args[]) { 5 Vector strs = new Vector(); 6 strs.addElement("abc"); 7 strs.addElement("de"); 8 strs.addElement("fg"); 9 int n = strs.size(); 10 for(int i = 0; i < n; i++) { 11 Object o = strs.elementAt(i); 12 String s = (String) o; 13 System.out.println(s);
7.9 System 클래스 • System 클래스 • 유용한 멤버 필드들 • 유용한 메소드들 ▪ static PrintStream err - 표준 에러 ▪ static InputStream in - 표준 입력 ▪ static PrintStream out - 표준 출력 ▪ static long currentTimeMillis() - 현재 시각을 밀리초 단위로 리턴한다. ▪ static void exit(int status) - 현재 JVM을 종료한다. ▪ static void gc() - 가비지 콜렉터를 실행시킨다. ▪ static void setIn(InputStream in) - 표준 입력을 in으로 변경한다. ▪ static void setOut(PrintStream out) - 표준 출력을 out으로 변경한다.