본문 바로가기

이해를 위한 메모 공간

(14)
14.final 예약어 템플릿 메소드를 만들면서 final 예약어를 사용해 본 것을 기억합니다. final은 마지막이란 의미로, 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻입니다. 사용 위치 설명 변수 final 변수는 상수를 의미합니다 메소드 final 메소드는 하위 클래스에서 재정의할 수 없습니다. 클래스 final 클래스는 상속할 수 없습니다. 한방에 실습. Define.java 파일을 하나 만들고 프로그램에서 사용할 상수 값들을 선언했습니다. public 예약어로 선언했으므로 이들 값은 외부에서도 사용할 수 있습니다. 그리고 모든 상수를 static으로 선언했기 떄문에 인스턴스를 생성하는 것과 관계없이 클래스 이름으로 참조할 수 있습니다.
13-2.템플릿 메소드를 응용한 간단 실습 간단한 게임플레이어를 기준으로하여 플레이어의 레벨에 따른 행동프로그램을 구현하는 실습입니다. 각 레벨에서 수행할 공통 기능은 PlayerLevel 추상클래스에서 선언합니다. 각 레벨마다 run(), jump(), turn(), showLevelMessage() 메소드는 조금씩 다르게 구현되기 때문에 추상 메소드로 선언합니다. go() 메소드는 시나리오대로 수행되어야하므로 코드내용을 완전히 구현했습니다. Player는 한 번에 하나의 레벨 상태이므로 level 변수에 레벨에 해당하는 인스턴스를 대입합니다. 레벨을 변경할 수 있는 upgradeLevel()메소드를 만들어줍니다. 초심자 레벨에서는 천천히 달릴 수만 있습니다. 점프나 턴은 할 수 없도록 합니다. 중급자 레벨에서는 빠르게 달릴 수 있고 높이 점프..
13-1.템플릿 메소드 추상 클래스와 템플릿 메소드 추상 클래스를 활용한 예로 템플릿 메소드를 알아보겠습니다. '템플릿(template)'이란 용어를 사전에서 찾아보면, 틀이나 견본을 뜻합니다. 틀이 있는 메소드라는 의미입니다. 템플릿 메소드는 추상클래스를 사용하여 구현할 수 있습니다. Car 클래스를 생성했습니다. 이 클래스는 drive()와 stop()추상 메소드와 3개의 구현된 메소드 startCar(), turnOff(), run()을 가지고 있습니다. 자동차 시동을 켜고 끄는 것은 어느 차나 동일하기 때문에 startCar()와 turnOff()는 미리 코드를 구현해 두었습니다. drive()와 stop()은 차종에 따라 다른 방식으로 움직일 수 있습니다. 그래서 추상 메소드로 선언했습니다. 이 중 15~20행에 구현..
13.추상 클래스 '추상적이다'라는 말의 뜻을 생각해봅시다. 추상적이라는 것은 구체적이지 않고 막연한 것을 뜻합니다.그렇다면 ' 어떤 클래스가 추상적이다'라는 말은 무슨 뜻일까요? 앞의 용어 풀이를 대입해 보면 '구체적이지 않은 클래스' 라는 뜻이겠죠. 추상 클래스를 영어로 표현하면 abstract class 이고, 추상 클래스가 아닌 클래스는 concrete class 라고 합니다. 우리가 지금까지 만든 클래스는 모드 concrete class였습니다. 추상 클래스 활용 방법을 살펴보기 전에 추상 클래스 문법부터 배워 보겠습니다. 추상 클래스는 항상 추상 메소드를 포함합니다. 추상메소드는 구현코드가 없습니다. 함수의 구현코드가 없다는 것은 함수 몸체(body)가 없다는 뜻입니다. {}(중괄호)로 감싼 부분을 함수의 구현..
12.다형성 활용 및 다운 캐스팅 앞에서 배운 상속과 다형성을 활용하면 프로그램을 유지보수하는 데 매우 편리합니다. 이때 배열을 함께 사용하면 여러 하위 클래스 자료형을 상위 클래스 자료형으로 한꺼번에 관리할 수도 있습니다. 새로운 고객 등급이 생겼습니다. 이 등급의 고객은 VIP 고객 과 보너스 포인트 적립률이 다르고 담당 상담원도 없습니다. 재정의한 메소드가 가상 메소드방식에 의해 자동으로 호출되지 않는다면 if-else if문을 사용하여 각 자료형에 적합한 코드를 따로 구현해야 할 것입니다. 게다가 새로운 등급의 고객이 추가로 필요한 경우에는 또 다른 조건을 구현해야 하므로 코드의 유지보수가 어려워집니다. 이런경우에 상속과 다형성을 잘 활용하면 복잡한 코드를 간결하게 줄일 수 있고 확장성 있는 프로그램을 구현할 수 있습니다. 다운캐..
11.상속 객체 지향 프로그래밍의 중요한 특징 중 하나가 상속입니다. 상속은 우리가 일반적으로 알 듯 무엇인가를 무려받는다는 의미입니다. 객체 지향 프로그램은 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 그 기반이 되는 기술이 바로 상속입니다. 새로운 고객 등급이 필요한 경우 VIP 고객을 추가 하게 될 경우 새로운 멤버 변수가 필요합니다. VIP 혜택 - 제품을 구매시 항상 10% 할인 혜택 - 보너스 포인트 적립율 5% - 담당 전문 상담원을 배정함 이 경우 기존의 Customer 클래스가 존재하므로 Customer 클래스에 VIP 고객에게 필요한 변수와 메소드까지 함께 포함하여 구현하면 됩니다. 그런데 이렇게 구현하게되면 Customer 클래스의 코드가 복잡해집니다. 게다가..
8.클래스와 객체 This 예약어 클래스간 상호작용. 학생이 요금을 내고 대중교통을 타고. 해당 교통수단에서 요금이 증가하고 인원을 확인 할수 있는 객체를 생성 및 객체간 상호 작용을 확인해 보는 실습입니다.
7.생성자 생성자란 만들어진 클래스를 호출하는 메소드의 일종이다.(일종의 함수) 생성자를 생성하여 메인에서 생성자를 사용하여 객체를 생성 할 수 있다. 생성자는 디폴트 생성자와 일반 생성자로 나눌 수 있는데, 디폴트 생성자는 클래스에 내에 아무런 생성자도 없을 시 자동으로 생성되는 생성자이다. 디폴트 생성자는 객체를 생성 할 수 있지만, 아무런 값이 들어 있지않은채로 생성 된다.(어차피 초기화 해야된다는 말) 그러나 일반 생성자가 생성 되어있을 경우에는 디폴트 생성자는 자동으로 생성되지않는다. 그래서 디폴트 생성자를 사용하기 위해서는 위 그림과 같이 직접 기입해 넣어야 한다. 위 그림과 같이 Bus(100); int 인자 생성자를 활용하여 객체 bus100 을 생성 했다.(생성된 객체,인스턴스는 heap 메모리에 ..