본문 바로가기

반응형

Java 공부/신용권의 이것이 자바다

인터페이스 Interface 확장 인터페이스는 객체 사용 방법(메소드 호출 방법)을 기술한 타입이다. 따라서 메소드 선언부만 있으면 된다. 그러나 자바8부터는 실행내용을 가지고 있는 디폴트 메소드를 작성할 수 있다. 이 디폴트 메소드는 인터페이스에 선언 되지만, 인터페이스만으로 사용할 수 없다. 디폴트 메소드는 구현 객체의 인스턴스 메소드이다. 그렇다면, 인터페이스에서 왜 디폴트 메소드가 필요한 걸까? 그것은 인터페이스의 확장을 위해 필요하다. 기존 인터페이스에서 추상메소드(method2();)를 추가할 수는 없다. 추상메소드를 추가하면, 기존 구현 클래스들이 모두 에러가 난다. 그런데 디폴트 메소드(default methode2() {...})는 추상 메소드가 아니다. 디폴트 메소드는 구현 클래스에서 꼭 구현할 필요도 없다. 디폴트 메.. 더보기
인터페이스 Interface 상속 인터페이스 간에도 상속이 가능하다. 클래스( class)는 상속을 하나만 할 수 있는데, 인터페이스는 다중 상속을 할 수 있다. 그것을 작성하는 코드는 다음과 같다. public interface 하위 인터페이스 extends 상위인터페이스1, 상위인터페이스2 {...} 그런데 하위인터페이스를 구현하는 클래스는 아래 추상 메소드를 모두 재정의해야 한다. 예를 들어, 하위인터페이스의 추상 메소드와 상위인터페이스1의 추상 메소드, 상위인터페이스2의 추상메소드가 존재한다고 한다면, 이것들을 모두 재정의 해 줘야 한다는 것이다. 그 코드는 다음과 같이 작성한다. 하위인터페이스 변수 = new 구현클래스(...); 상위인터페이스1 변수 = new 구현클래스(...); 상위인터페이스2 변수 = new 구현클래스(... 더보기
인터페이스 강제타입변환 Casting 인터페이스 강제타입변환(Casting)이란 인터페이스 타입으로 자동 타입변환 된 후, 다시 구현 클래스 타입으로 변환되는 것을 일컷는다. 구현클래스 타입에 선언된 다른 멤버를 사용하기 위해서 캐스팅이 꼭 필요할 때가 있다. 선언은 다음과 같이 해준다. 구현클래스 변수 = (구현클래스) 인터페이스 변수; 이렇게 하면, 인터페이스 변수가 구현클래스의 변수로 강제 타입변환이 이루어진다. 이제, 코드로 확인해 보자! 이것은 Vehicle 인터페이스 클래스이다. 여기에는 run 메소드만 있다. Vehicle 을 구현한 버스클래스를 만든다. Bus 클래스는 Vehicle에서 호출한 run메소드 외에 독자적으로 checkFare메소드를 갖고 있다고 해보자. 그러고 나서 실행클래스를 보자! 인터페이스 타입으로 변환을 .. 더보기
인터페이스 배열로 구현객체 관리 인터페이는 선언하는 필드가 여러개가 있을 경우, 배열로 관리하면 참 간단하다. 예를 들어, 타이어의 경우 4개의 필드가 필요하다. 그것을 각각 선언한다면, 다음과 같은 코드를 작성하게 된다. 아래는 실행 클래스이다. 보시다 시피, 처음에는 한국타이어로 4개의 타이어를 다 굴러가게 했다. 그러나 실행 클래스에서 앞타이어 두개를 금호타이어로 바꾸었다. 한국타이어가 굴러가고 뒤이어 앞바퀴가 금호타이어로 변환되었음을 알 수 있을 것이다. 그럼, 이번에는 배열로 바꾸어 코드를 짜보자! 배열로 바꾸면, 코드가 이렇게 간단해진다. 비교하기 쉽게 필드를 각각 선언한 것을 주석처리했다. 게다가 위에서 확인할 수 있듯이 run 메소드는 for문으로 더 간단하게 표현된다. 그럼, 결과는 어떨까? 실행 클래스를 확인해 보자!.. 더보기
인터페이스(interface)의 정의와 선언방법 인터페이스(Interface)는 100% 추상 클래스로 개발코드와 객체를 서로 연결시켜 주는 역할을 한다. 개발코드와 객체의 메소드 사이에 인터페이스를 두면, 개발코드를 수정하지 않고 사용하는 객체를 변경할 수 있다. 인터페이스는 하나의 객체가 아니라 여려 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴 값이 달라진다. 그러므로 인터페이스를 사용하면, 개발코드의 변경 없이 실행내용과 리턴값을 다양화 할 수 있다. 상속은 1:1이지만, 인터페이스는 여러 개를 구현할 수 있다. 인터페이스를 선언하는 법을 알아보자! 1. 인터페이스 이름: 자바 식별자 작성 규칙에 따라 작성된다. 첫자는 대문자로 시작한다. 숫자로 시작하면 안되고, $와 _를 제외한 특수 문자는 사용하면 안된다. 다.. 더보기
Casting & instanceof, 강제타입변환과 객체 타입 확입 Casting(강제타입변환)이란 부모 타입을 자식 타입으로 변환하는 것을 말한다. 부모클래스객체는 자식클래스타입으로 자동 변환되지 않는다. 그래서 자식클래스타입으로 변환을 강제적으로 한다는 뜻에서 ()속에 Castng 기호를 넣어 준다. 즉, 자식클래스 변수 = (자식클래스) 부모클래스타입; 이렇게 코드를 작성한다. 강제 캐스팅할 수 있는 조건은 자식 타입이 부모 타입으로 자동 변환된 이후, 다시 자식 타입으로 변환할 때만 유효하다. 강제 타입변환이 필요한 경우는 자식 타입이 부모 타입으로 자동변환되면, 부모 타입에 선언된 필드와 메소드만 사용 가능하다. 그런데 자식 타입에 선언된 메소드를 다시 사용해야 한다면, 강제타입변환(Casting)이 필요하다. 그렇다고 해서 부모 타입이면, 모두 자식 타입으로 .. 더보기
'상수'(static final)란 무엇인가? 상수는 static final 필드이다. final 필드는 한번 값이 정해지면 수정을 할 수 없다. 그런 까닭에 상수도 한번 값이 정해지면 수정이 되지 않는다. 한편, 'final 필드'는 객체마다 가지고 있는 불변의 인스턴스 필드를 지칭한다. 그러나 상수는 정적(static)이기 때문에 객체마다 존재하지 않고, 메소드 영역의 상수 에어리어에 저장된다. 상수는 공용데이터로 사용된다. 상수이름은 전부 대문자로 작성하는 것이 관례이다. 다른 단어가 결합되면, _로 연결한다. * 초기화 방법 1) 상수는 선언과 동시에 초기값을 정해 줄 수 있다. 이것이 가장 일반적이다. static final 타입 상수 [= 초기값]; 즉, static final double EARTH_RADIUS = 6400; 이렇게 선언.. 더보기
열거상수( Enum)를 이용해서 '오늘의 요일' 코드 작성하기 자바에서 '열거 타입'(Enumeration Type)의 '열거상수'를 이용해서 오늘의 요일을 알아 볼 수 있다. 열거 상수는 변하지 않는 정해진 상수형태의 배열을 말한다. 특히, 요일을 열거객체에 담아놓고 오늘이 무슨 요일인지 코드를 통해 확인할 수 있다. 이때, 컴퓨터에 등록된 요일을 바탕으로 결과가 나타난다. 이를 위해, 먼저 열거객체를 만든다. 열거 객체는 바로 위의 코드와 같다. 열거객체를 만들기 위해서는 새로운 항목칸을 연다. 그러면, 'Enum'이 보일 것이다. 이것을 클릭하고 앞에서처럼 열거상수를 지정해 준다. 그러고는 위와 같이 코드를 작성해 보자. 이때, 요일의 이름이 호출되는 것은 아니고 배열의 순번이 호출된다. 그래서 오늘은 토요일, 6번이 호출되는 것을 알 수 있다. 위 코드는 요.. 더보기

반응형