목록분류 전체보기 (213)
각진 세상에 둥근 춤을 추자
템플릿 메서드를 활용한 게임 관련 프로그램을 구현해 본다. 게임 캐릭터의 경험치가 쌓이거나 어떤 이벤트를 통해 레벨이 올라간다. 플레이어의 레벨이 다르면 해당 레벨에 따라 할 수 있는 기능도 다를 것이다. 이와 같은 상황을 구현해 본다. Player가 게임을 한다. 게임에서 Player의 레벨에 따라 할 수 있는 기능은 세 가지이다. run( ), jump( ), turn( )이다. - 초보자 레벨: 천천히 달릴 수 있습니다. -> run( ) - 중급자 레벨: 빠르게 달리고 점프할 수 있습니다. -> run( ), jump( ) - 고급자 레벨: 엄청 빠르게 달리고 점프하고 턴할 수 있습니다. -> run( ), jump( ), turn( ) 모든 레벨의 player에게 필살기 메서드 go(int co..
'템플릿(templete)'이란 틀이 있는 메서드라고 볼 수 있다. 추상 클래스를 활용한 예로 템플릿 메서드를 알아본다. Car 클래스를 생성한다. 이 클래스는 drive(), stop() 이라는 추상 메서드와 startCar(), turnOff(), run()이라는 구현된 메서드를 가지고 있다. 시동을 켜고 끄는 것은 차종에 관계없이 동일하기 때문에 미리 코드로 구현했다. 그에 반해 drive(), stop()은 차종에 따라 다른 방식으로 움직일 수 있기에 추상 메서드로 선언했다. package ch09_2; public abstract class Car { public abstract void drive(); public abstract void stop(); public void startCar()..
추상 클래스(abstract class)는 완전하게 구현되어 있지 않은 메소드를 가지는 클래스를 의미한다. 메소드가 미완성이므로 추상 클래스는 객체를 생성할 수 없는데, 주로 상속 계층에서 추상적인 개념을 나타내기 위한 용도로 사용된다. 추상 클래스는 항상 추상 메서드를 포함한다. 추상 메서드에는 구현 코드가 없는데, 함수의 구현 코드가 없다는 것은 곧 함수 몸체인 body가 없다는 것을 뜻한다. int add (int x, int y){ return x+y; } 위 코드와 같이 중괄호 { }로 감싼 부분을 함수의 구현부(implementation)라고 한다. 이 부분이 없는 함수를 추상 함수(abstract function)이라 하고 자바에서는 추상 메서드(abstract method)라고 한다. 추상..
상위 클래스(Animal)를 하위 클래스(Human)이 상속받는 경우, Animal ani = new Human(); 이라는 코드를 쓸 수 있다. 이때, 하위 클래스는 상위 클래스의 자료형인 Animal을 사용한다. 그렇기 때문에 Animal 클래스에서 선언한 메서드와 멤버 변수만 사용할 수 있다. 만약, 필요에 따라 하위 클래스가 원래의 자료형인 Human으로 되돌아가야 하는 경우에는 어떻게 할까? 상위 클래스로 형 변환되었던 하위 클래스를 다시 원래의 자료형으로 형 변환하는 것을 다운 캐스팅(down casting)이라고 한다. 다운 캐스팅을 할 때 주의해야 할 점이 있다. 상속 관계를 살펴 보면 모든 인간은 동물이지만 반대로 모든 동물은 인간이 아니다. 따라서 다운 캐스팅을 하기 전에 상위 클래스로..
상위 클래스인 Customer 클래스와 이를 상속받는 하위 클래스인 VIPCustomer 클래스가 있다. 만약 고객이 늘어 VIP 고객만큼 물건을 많이 구매하지는 않지만, 그래도 단골인 고객에게 혜택을 주고자 한다. 그래서 일반 고객과 VIP 고객 사이의 중간 등급인 GOLD 등급의 클래스를 만들고자 한다. GOLD 고객의 혜택은 다음과 같다. - 제품 구매시 10% 할인 - 보너스 포인트 2% 적립 - 담당 전문 상담원 없음 1. Customer 클래스 생성하기 (상위 클래스) package ch08_5; public class Customer { // 멤버 변수 protected int customerID;// 고객 아이디 protected String customerName;// 고객 이름 prot..
Customer 클래스를 생성한다. package ch08_4; public class Customer { // 멤버 변수 protected int customerID;// 고객 아이디 protected String customerName;// 고객 이름 protected String customerGrade;// 고객 등급 int bonusPoint;// 보너스 포인트 double bonusRatio;// 적립 비율 public int getCustomerID() { return customerID; } public void setCustomerID(int customerID) { this.customerID = customerID; } public String getCustomerName() { re..
다형성(polymorphism)은 프로그래밍 언어에서 하나의 식별자로 여러 개의 작업을 처리하는 것을 의미한다. 앞서 배운 ‘메소드 오버로딩', ‘메소드 오버라이딩'을 포함해 ‘제네릭 프로그래밍'도 다형성이라 할 수 있다. 예를 들어 그림과 같이 3개의 클래스가 Animal 클래스를 상속받고 있는 경우가 있다. Animal 클래스에서 메서드를 하나 정의하고 상속 받은 클래스에서 재정의하는 프로그램을 작성해 본다. package ch08_4; class Animal{ public void move() { System.out.println("동물이 움직입니다."); } } class Human extends Animal{ public void move() { System.out.println("사람이 두 발..
하위 클래스인 VIPCustomer에서 super 예약어를 이용해 상위 클래스 Customer 클래스를 호출한다. 자식 클래스는 부모 클래스의 메소드를 상속받아서 사용할 수 있다. 하지만 상속은 받았더라도, 목적에 맞지 않아 변경하는 경우가 있다. 이때 메소드 오버라이딩(method overriding)은 자식 클래스가 부모 클래스의 메소드를 자신의 필요에 맞추어 재정의한다. (단, 메소드의 이름이나 매개 변수, 반환형은 동일해야 한다.) (1) 상위 클래스 - Customer package ch08_3; public class Customer { // 멤버 변수 protected int customerID;// 고객 아이디 protected String customerName;// 고객 이름 prote..
상속(Inheritance)이란, 기존에 존재하는 클래스로부터 필드와 메소드를 이어받고, 필요한 기능을 추가할 수 있는 기법이다. 즉, 상속을 이용하여 검증된 소프트웨어를 재사용할 수 있어 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 및 보수할 수 있다. ” extends ” 자바에서는 ‘extends’ 키워드를 이용하여 상속을 나타낸다. 상속하는 클래스를 부모 클래스(슈퍼 클래스)라고 하고, 상속받는 클래스를 자식 클래스(서브 클래스)라고 한다. 예를 들어 B클래스가 A클래스에서 상속받는다고 하면 다음과 같이 나타낼 수 있다. class B extends A { } 회사에서 고객 정보를 가지고 맞춤 서비스를 제공하는 고객 관리 프로그램을 구현해 본다. 고객 클래스를 구현하기 위해 클래스 속성을 멤버 변..
Student 클래스와 Subject 클래스 그리고 ArrayList를 사용해 학생 성적 출력 프로그램을 구현해 본다. (1) Student 클래스 구현하기 package ch07_4; import java.util.ArrayList; public class Student { int studentID; String studentName; // ArrayList 선언하기 ArrayList subjectList; public Student(int studentID, String studentName) { this.studentID = studentID; this.studentName = studentName; // ArrayList 생성하기 subjectList = new ArrayList(); } // 학..