목록java (47)
꿈 많은 사람의 이야기
자바 프로그램은 OS상에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서 OS의 모든 기능을 자바 코드로 접근하기가 어렵다. 그러나 java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. 그 기능은 프로그램 종료, 키보드 입력, 모니터 출력, 현재 시간 읽기 등이다. System 클래스의 모든 필드와 메소드는 정적(static) 필드와 정적(static) 메소드로 구성되어 있다. exit() 메소드경우에 따라서는 강제적으로 JVM을 종료시킬 때도 있다. 이때 System 클래스의 exit()메소드를 출력하면 된다. exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시키는 역할을 한다. 정상 종료일 경우 보통 매개변수에 0을 넣는다...
클래스를 선언할 때 extends키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속하게 된다. 즉, 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object 클래스는 자바의 최상위 부모 클래스이다. Object 클래스에는 다양한 메소드가 있다. 대표적인게 equals()메소드, hashCode(), toString() 메소드이다. equals() 메소드 equals메소드는 public boolean equals(Object obj) 형태로 되어있다. 매개 타입이 Object인 것은 모든 객체가 매개값으로 대입될 수 있음을 말한다. Object의 equals()메소드는 두 객체가 동일한 객체라면 true를 리턴하고 그렇지 않으면 false를 리..
java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지이다. 그렇기 때문에 이 패키지는 import 없이 사용할 수 있다. 지금까지 사용한 String과 System 클래스도 java.lang 패키지에 포함되어 있기 때문에 import하지 않고 사용했다. 클래스 용도 Object - 자바 클래스의 최상위 클래스로 사용 System -표준 입력 장치(키보드)로부터 데이터를 입력 받을 때 사용 -표준 출력 장치(모니터)로 출력하기 위해 사용 -자바 가상 기계를 종료시킬 때 사용 -쓰레기 수집기를 실행 요청할 때 사용 Class - 클래스를 메모리로 로딩할 때 사용 String - 문자열을 저장하고 여러 가지 정보를 얻을 때 사용 StringBuffer StringBuilder - 문자..
자바는 예외를 떠넘기는(throws)그리고 예외를 발생시키는 throw가 존재한다. throws는 메소드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 처리하는 것이 기본이지만 경우에 따라서는 메소드를 호출한 곳으로 예외를 떠넘길 경우 사용한다. throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않는 예외를 호출한 곳으로 떠넘기는 역할을 한다. 그리고 throws 키워드가 붙은 메소드를 호출할 때는 반드시 try-catch로 묶어 try 블록 내에서 호출 되어야 한다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다. 다음 소스를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public void method1() { tr..
예외라는 것은 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다. 예외가 발생되면 프로그램이 종료가 될 수도 있는데 예외처리를 통해 프로그램을 종료하지 않고 정상 실행상태가 유지되도록 할 수 있다. 예외에는 2가지 종류가 있다. 일반적인 예외(Exception)와 실행 예외(Runtime Exception)이다. 일반 예외는 컴파일러 체크 예외라고도 한다. 실행예외는 컴파일 하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. 자바에서는 예외를 클래스로 관리한다. 다음은 예외 클래스를 보여준다. 모든 예외 클래스는 java.lang.Exception 클래스를 상속 받는다. 위 그림을 보면 맨 위에 java.lang.Exception 클래스가 존재한다. 그 밑에 ..
중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 package Study_myself_3_from_390; class Button2 { OnClickLisnter listner; void setOnClickListener(OnClickLisnter listener) { this.listner = listener; } void touch()..
클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나, 특정 클래스와 관계를 맺을 경우에는 관계 클래스를 클래스 내부에 선언하는 것이 좋다. 중첩 클래스란 클래스 내부에 선언한 클래스를 말하는데 이 것을 사용하면 두 클래스의 멤버드을 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다. 선언 위치에 따른 분류 선언 위치 설명 멤버 클래스 인스턴스 맴버클래스 class A{ class B{ } } A 객체를 생성해야만 사용할 수 있는 B 클래스 (Inner Class) 정적 멤버 클래스 class A{ static class B { } } A 클래스로 바로 접근할 수 있는 B 중첩 클래스 (Nested Class) 로컬 클래스..
인터페이스에선 추상 메소드를 빼고 디폴트 메소드도 존재한다. 디폴트 메소드는 인터페이스에서 바로 사용할 수 없고 또한, 추상 메소드가 아닌 인스턴스 메소드이므로 구현 객체가 있어야 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 interface RemoteControlIn { //상수 int MAX_VOLUME = 10; int MIN_VOLUME = 0; //추상 메소드 void turnOn(); void turnOff(); void setVolume(int volume); //디폴트 메소드 default void setMute(boolean mute) { if(mute) { System..
자바에서 인터페이스는 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다. 이러한 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있다는 장점을 가지게 된다. 인터페이스는 ~.java 형태의 소스 파일로 작성되고 컴파일러(javac.exe)를 통해 ~.class 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다. 단, 소스 작성 시 선언 방법이 다르다. 인터페이스 선언은 class 키워드 대신에 interface를 넣으면 된다. interface Ri{ } 이..
객체를 직접 새성할 수 있는 클래스를 실체 클래스라고 하면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성을 가질 수 있다. 이 추상 클래스의 용도는 첫째, 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적이다. 실체 클래스를 설계하는 사람이 여러 사람일 경우 실체 클래스 마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다. 이러한 케이스를 방지하기 위해 상속할 클래스를 만들어 필드와 메소드를 통일시킬 수 있다. Phone 추상 클래스를 상속하는 Telephone과 SmartPhone은..