본문 바로가기

프로그래밍 언어/JAVA

(62)
JAVA 입문 - 인터페이스 활용 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 인터페이스 요소 한 클래스가 여러 인터페이스를 구현하는 경우 한 클래스가 여러 클래스를 상속받으면 메서드 호출이 모호해지는 문제가 발생할 수 있다. 하지만 인터페이스는 한 클래스가 여러 인터페이스를 구현할 수 있다. 예로 Buy 인터페이스와 Sell 인터페이스를 구현한 Customer 클래스를 만들어보자. 추상 메서드 buy( )와 sell( )이 각각 선언된 인터페이스 Buy와 Sell을 Customer 클래스에 구현했다. 인터페이스는 구현 코드나 멤버 변수를 가지지 않기에 여러 개를 동시에 구현할 수 있다. 두 인터페이스에 이름이 같은 메서드가 선언되었다 해도 구현은 클래스에서 이루어지므로 어떤 메서드를 호출해야 하는지 모호하지 않은 것이다..
JAVA 입문 - 인터페이스 요소 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 인터페이스와 다형성 인터페이스 상수 인터페이스는 추상 메서들 이루어지므로 인스턴스를 생성할 수 없으며 멤버 변수도 사용할 수 없다. 하지만 인터페이에 일반 변수처럼 변수를 선언해도 오류가 나지 않는다. 그 이유는 인터페이스에 선언한 변수를 컴파일하면 상수로 변환되기 때문이다. 디폴트 메서드와 정적 메서드 자바 8부터 제공한 디폴트 메서드와 정적 메서드 기능. 디폴트 메서드는 인터페이스에서 구현 코드까지 작성한 메서드이다. 인터페이스를 구현한 클래스에 기본적으로 제공할 메서드인 것이다. 정적 메서드는 인스턴스 생성과 상관없이 사용할 수 있는 메서드이다. 하지만 디폴트 메서드나 정적 메서드를 추가했다 해서 인터페이스로 인스턴스를 생성할 수는 없다...
JAVA 입문 - 인터페이스와 다형성 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 인터페이스 인터페이스의 역할 인터페이스는 디폴트 메서드와 메서드와 정적 메서드 구현부가 없다면 그저 빈 껍데기이다. 그러면 메서드 선언부만 있는 인터페이스는 어디에 사용할까? 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 미리 알려주는 명세(specification) 또는 약속의 역할이다. 예로 Abc 인터페이스를 구현한 A 클래스와 이 클래스를 사용하는 Z 프로그램이 있다. Abc 인터페이스에는 구현할 추상 메서드가 모두 선언되어 있고, 어떤 매개변수를 사용하는지와 어떤 자료형이로 값이 반환되는지 선언되어 있다. 이는 즉 Z 프로그램에서 A 클래스의 구현 코드 전체를 살펴보지 않고 Abc 인터페이스의 선언부만 봐도 A 클래스를 어..
JAVA 입문 - 인터페이스 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - final 예약어 구현 코드가 없는 인터페이스 인터페이스(Interface)는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 인터페이스는 추상 메서드와 상수로만 이루어져 있다. 구현된 코드가 없기 때문에 당연히 인터페이스로 인스턴스를 생성할 수도 없다. 허면 인터페이스는 어떻게 사용하는 걸까? 인터페이스 만들기 인터페이스를 사용해 간단한 계산기 프로그램을 만들어보자. 이클립스에서 인터페이스를 만들려면 패키지에 마우스 우클릭을 하고 New - Interface를 클릭한다. 그리고 인터페이스 내부에 다음 코드를 작성한다. 인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환된다. 또, 인터페이스에서 선언한 메서드는 컴..
JAVA 입문 - final 예약어 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 템플릿 메서드 응용하기 지난 글에서 템플릿 메서드를 만들면서 final 예약어를 사용했었다. 예전에 작성한 상수와 리터럴에서도 사용한 기억이 있다. 이는 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻으로, JAVA 프로그램에서는 변수, 메서드, 클래스에 사용된다. final 메서드는 지난 글인 템플릿 메서드에서 배웠으니 이번 글에서는 final 변수와 클래스에 대해 공부하자. 상수를 의미하는 final 변수 상수는 위에 걸어둔 링크의 글에 나오는 설명처럼 변치 않는 수이다. 전에 배운 내용이니 간단한 예제로만 확인해보자. 위 사진은 두 변수 int num과 final int NUM을 선언했다. 변수 이름은 대소문자를 구변하기에 두 변수는..
JAVA 입문 - 템플릿 메서드 응용하기 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 템플릿 메서드 지난 글에서 템플릿 메서드를 공부했으니 한 가지 예제를 만들어보자. 게임을 할 때를 가정해보자. 게임 캐릭터에는 레벨이 있다. 레벨은 경험치가 쌓이거나 어떤 이벤트를 통해 올라간다. 플레이어 레벨이 다르면 해당 레벨마다 할 수 있는 역할도 다르다. 이를 템플릿 메서드를 사용해 구현해보자. 시나리오: Player가 있고, 이 Player가 게임을 한다. 게임에서 Player가 가지는 레벨에 따라 할 수 있는 세 가지 기능이 있다. 초보자 레벨 : 천천히 달릴(run) 수 있다. 중급자 레벨 : 빠르게 달리고(run) 점프할(jump) 수 있다. 상급자 레벨 : 굉장히 빨리 달리고(run) 점프하며(jump), 턴(turn)할 수 있..
JAVA 입문 - 템플릿 메서드 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 추상 클래스 추상 클래스와 템플릿 메서 추상 클래스를 활용한 예로 템플릿 메서드를 알아보자. '템플릿 메서드(template method)'란 틀이 있는 메서드라는 뜻이다. 전에 작성한 글의 싱글톤 패턴과 같은 디자인 패턴이다. 템플릿 메서드는 추상 클래스를 사용하여 구현할 수 있으며 아래 사진을 통해 알아보자. 생성한 Car 클래스에는 drive( )와 stop( ) 추상 메서드와 3개의 구현된 메서드 startCar( ), turnOff( ), run( )을 갖고 있다. 여기서 16~21행에 선언한 구현된 템플릿 메서드인 run( )을 살펴보자. 이 메서드는 시동을 켜고, 달리고, 멈추고, 시동을 끈다. 만약 Car 클래스를 상속받으면 어떤..
JAVA 입문 - 추상 클래스 지난 글: [프로그래밍 언어/JAVA] - JAVA 입문 - 다운 캐스팅과 instanceof 추상 클래스 추상 클래스(abstract class)란 '구체적이지 않은 클래스'이다. 내가 그간 공부하며 만들었던 클래스는 모두 구상, 구현 그리고 구체 클래스라 불리는 concrete class였다. 추상 클래스 문법 추상 클래스는 항상 추상 메서드를 포함한다. 추상 메서드는 구현 코드가 없다. 함수의 코드가 없다는 것은 함수 몸체(bo dy)가 없다는 것이다. int add(int x, int y) { return x + y; } 중괄호로 감싼 부분을 함수의 구현부(implementation)라 한다. 이 부분이 없는 함수는 추상 함수(abstact function)이고 JAVA에서는 추상 메서드(abst..