자바) 객체지향으로 BlackBox 만들기(3)
(5) 메소드오버로딩
메소드오버로딩을 이용해 블랙박스에 녹화기능을 만들어 볼 것이다
-날짜시간정보표시
-속도정보 여부
-영상 기록 단위(분)
BlackBox 클래스에 작성
//녹화
//날짜시간정보표시 여부 ,속도정보 여부 , 영상 기록 단위(분)
void record(boolean showDateTime,boolean showSpeed,int min){
System.out.println("녹화를 시작 합니다");
if (showDateTime){
System.out.println("영상에 날짜 정보가 표시 됩니다.");
}
if (showSpeed){
System.out.println("영상에 속도 정보가 표시 됩니다");
}
System.out.println("영상은 " + min + "분 단위로 기록 됩니다.");
}
호출
BlackBox b1 = new BlackBox();
b1.modelName = "까돌이";
b1.record(false, false, 10);
System.out.println("-----------------------------");
b1.record(true, false, 3);
System.out.println("-----------------------------");
녹화를 시작 합니다
영상은 10분 단위로 기록 됩니다. false , false ,10
-----------------------------
녹화를 시작 합니다
영상에 날짜 정보가 표시 됩니다.
영상은 3분 단위로 기록 됩니다. true, false, 3
하지만 여기서 문제점은 맨위에 코드가 수정이 되면 아래 기본 코드들도 수정을 해워야 하기 때문에 오버로딩을 사용하여 아래와 같이 선언
기본 세팅값으로 설정하면 편할 것이다
//오버로딩을 통해 윗 4줄의 코드를 그대로 호출 할 수 있다
//기본세팅이 되어서 그대로 호출하면 편하다
void record(){
record(true,true,5);
}
녹화를 시작 합니다
영상에 날짜 정보가 표시 됩니다.
영상에 속도 정보가 표시 됩니다
영상은 5분 단위로 기록 됩니다.
(6) 클레스 메소드
1.블랙박스 사용중 어떠한 문제가 발생
2.블랙박스를 통해 바로 고객센터에 연결 기능을 메소드로 만들기
//클래스 메소드 static 변수와 같다
//전에 쓰던 메소드와 차이점은 static붙고 안붙고의 차이
//코드의 내용이 항상 똑같이 동작(모든 객체에 공통으로 적용)
static void callServiceCenter(){
System.out.println("서비스 센터(1588-0000) 로 연결합니다 ");
}
(호출) 객체생성없이 바로 호출 가능(! 객체생성 후 호출 할 수 있지만 구별을 위해 보통은 아래와 같이 쓴다)
public class _06_ClassMethod {
public static void main(String[] args) {
BlackBox.callServiceCenter();
서비스 센터(1588-0000) 로 연결합니다 .
static void callServiceCenter(){
System.out.println("서비스 센터(1588-0000) 로 연결합니다 ");
// modelName = "test";(인스턴스변수에서 만든 modelName은 접근이 불가능
canAutoReport = false; //클레스 변수에서 만든 canAutoReport 적용 가능
}
modelName은 우리가 (1)에서 봤던 인스턴스변수를 클레스메소드 안에서 선언할려고 하였지만 접근이 불가능 하였다
이유 : 인스턴스변수는 객체 생성 후 만들어져야 사용 할 수 있는 객체이기때문에 static 내에서는 직접 접근이 불가능.
canAutoReport는 (3)에서 봤던 클레스변수에 만든 변수이다 위 코드와 같이 접근이 가능하고 공통적으로 적용되는 기능을
사용 할 수 있다.
즉,
일반적인 메소드는 인스턴스 메소드이며 각 객체마다 서로 다른 동작을 한다
static 키워드가 붙은것은 클레스메소드이고 같은 동작을 하며 객체가 만들어지지 않고도 클래스명.으로 접근 가능