본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-02-19 자바공부 (상속1 , 라이브러리 )

반응형

상속의 기본 

클래스의 메소드나 속성을 다른 클래스에게 전달해주는것

 

상위클래스(부모) : 자원을 물려주는 클래스 

하위클래스(자식) : 자원을 물려받는 클래스 

 

동일한 변수와 메소드를 계속해서 만들어내지 않고 하나의 클래스를 만들어서 사용하면 

보다 간편하게 사용하기 위하여 상속을 사용한다 

 

상속하는법 

[제어자] class [클래스이름] extends [부모클래스이름]

 

상속은 소스를 재활용하기 위하여 사용된다! 재활용 하므로 편의성과 생산성 증가 ! 

페트병 재활용하면 다음에 똑같은 페트병을 또 안만들어도 된다 !  

 

*자식클래스가 인스턴스를 하게 되면 부모와 자식 둘다 생성자가 실행된다 

*인스턴스가 생성될때 실행 순서는 부모가 먼저 실행 되고 자식실행 

 ( 자식클래스 생성자에 super() 가 자동으로 만들어지면서 부모클래스 먼저 실행된다) 

이때 생성자 초기화에대해 주의할 사항

 

1. 자식클래스의 매개변수를 가진 생성자 

위코드 표를 잘 보면 인스턴스를 하는 과정에서 5라는 매게변수를 자식클래스에게 넘겨 주었고 

자식이 5의 매개 변수를 받았지만 넘겨주는 값이 없으므로 부모의 생성자는 매개를 받지 않는 생성자가 실행 된다 

 

2, super()를 이용한 사례 

반대로 여기서는 super로 매개변수를 전달해주었기때문에 부모클래스에서 매개변수를 받는 생성자가 실행 된다 


직접 코드를 보면서 이해 하자

부모클래스 

package inheritance;
//부모 클래스 
public class Cellphone {

	String model, color;
	// 메인클래스에서 자식으로 보내고 , 자식에서 부모로 생성자초기화로 값을 받아 왔다 
	public Cellphone(String model, String color) {
		this.model = model;
		this.color = color;
	}

	void powerOn() {
		System.out.println("전원을 켭니다");
	}

	void powerOff() {
		System.out.println("전원을 끕니다");
	}

	void bell() {
		System.out.println("띠링띠링 벨울렷엉");
	}

	void sendVoice(String message) {
		System.out.println("자신" + message);
	}

	void receiveVoice(String message) {
		System.out.println("상대방" + message);
	}

	void hangUp() {
		System.out.println("전화를 끊습니다.");
	}
}

자식클래스 

package inheritance;
//자식 클래스 부모를 상속 받아왔다 
public class DMBCellPhone extends Cellphone {

	int chanel;

	//생성자 부모에서 만들어 놓은거 자동적으로 받아왔다
	public DMBCellPhone(String model, String color, int chanel) {
		//부모클래스 생성자에 넘겨 준다 
		super(model, color);
		this.chanel = chanel;
	}
	
	void turnOnDMB() {
		System.out.println("채널" + chanel + "번DMB 방송 수신을 시작합니다.");
	}

	void changeChanelDMB(int chanel) {
		this.chanel = chanel;
		System.out.println("채널" + chanel + "번으로 바꿉니다.");

	}

	void turnOffDMB() {
		System.out.println("DMB 방송 수신을 멈춥니다.");
	}

}

메인클래스 

package inheritance;
//메인 클래스 
public class DMBcellPhone_EX {

	public static void main(String[] args) {
		// 자식클래스 인스턴스화 , 인스턴스화 하면서 부모클래스도 자동인스턴스 
		DMBCellPhone dmbcellphone = new DMBCellPhone("갤럭시 s21" , "블랙", 10);
		
		System.out.println("모델 : " +dmbcellphone.model);
		System.out.println("모델 : " +dmbcellphone.color);
		System.out.println("모델 : " +dmbcellphone.chanel);
		
		//상속받아온 정보 , 속성 , 자료들을 직접 사용 할숭있다 
		dmbcellphone.powerOn();
		dmbcellphone.bell();
		dmbcellphone.sendVoice("여보세옳");
		dmbcellphone.receiveVoice("아옳옳옳");
		dmbcellphone.sendVoice("오호라~ 옳옳");
		dmbcellphone.hangUp();
		
		dmbcellphone.turnOnDMB();
		dmbcellphone.changeChanelDMB(25);
		dmbcellphone.turnOffDMB();

	}

}

출력결과

 

이렇게 출력결과 값이 나온다 

 

기타 사항  private 및 static 

 

private 멤도도 상속은 가능하다 가능은 하지만 

사용이 안되고 메소드를 통해서 접근만 가능하다 

고로 상속 받아도 prvate는 직접접근 안되!! 

 

static은 엄밀히 따지면 상속은 아니지만 일반 변수처럼 사용이 가능 할 뿐이다!!

static은 메모리에 먼저 올라가니까~ 가능해~~~~ 

 

위에서부터 차례대로 보면 그렇게 어렵지 않다고 생각하는데 계속 일럴까.,..? ㅋ 

상속에 관해서는 아직 많은 것들이 남았으니까 배우는대로 올려보자~~

 


라이브러리

프로그램 개발에 있어서 기본적으로 제공하는 기능들이 있다. 

기본적으로 제공하는 라이브러리

 그 기능들은 위 이미지 파일에서 찾아보수 있는데 기본적인 기능들 말고 

내가 만든 클래스를 라이브러리화 하거나 이미 누군가가 만들어 놓은 모듈을 라이브러리라고 한다 

고로 외부의 라이브러리를 잘 끌어다 쓰는 것이 생산성 및 프로그램 품질을 높이는 쉬운 방법중 하나이다!!

 

라이브러리 추가하는 방법

 

외부 라이브러리 파일

내가필요한 라이브러리를 다운 받아서 추가하여 사용한다 

라이브러리 추가하는 방법은 다음과 같다 

1. 프로젝트에 오른쪽 마우스 클릭후 Properties클릭

2.Properties창이 뜨면 이미지의 순서대로 진행 (3번에서 Classpath나 Modulepath 아무곳이나 상관 없음) 

Properties

3. Apply and Close 버튼을 누르면 이렇게 추가된게 보인다 

추가된 라이브러리

4.모듈설정 (모듈파일에 이렇게 설정을 해준다 

모듈에 설정

이렇게 하면 라이브러리 추가가 완료 되었다~ !! 

 

그럼 추가한 라이브러리가 잘 작동 되는지 확인 해보자~! 

package string_utils;

// 외부 라이브러리에서 가져와 사용하고 있다는 증거!! import해서 사용중 
import org.apache.commons.lang3.StringUtils;

public class Common_jar_Ex {
	public static void main(String[] args) {
		
		
		
		String expression = "1+2-3/4*5=?";
		//저뒤에 있는 특수문자를 따로 분리하여 splitStr 배열에 넣어라 
		String[] splitStr = StringUtils.split(expression, "*?/-=+");
		//StringUtils.split 는 외부라이브러리에서 가져온 기능이다 자바에 라이브러리를 넣어줘 사용할수 있는것이다.
		for(int i = 0 ;i <splitStr.length; i ++ ) {
			System.out.println(splitStr[i]);
		}
		
	}
}

 

이렇게 기본 라이브러리에 없는 기능을 간단히 사용해보았다! 결과는 어떻게 나오는지 보자 

결과값

기존 이라면 "1+2-3/4*5=?" 이렇게 출력이 되어야 하지만 외부에서 가져온 기능으로 인하여 

연산 기호들이 다 빠진걸 확인 할 수 있다 

 

이렇게 외부 라이브러리를 활용하면 보다 많은 것들을 쉽게 할 수 있기때문에 꼭 알아두고 

내가 필요한 라이브러리를 찾아서 사용하면 되는것이다 !!! 

 

오늘은 여기까지~ 공부하느라 고생했다 옳옳옳 ~ -멀록 아옳옳- 

반응형