[스진초 4기] 객체 지향의 특징

창진·2023년 7월 24일

[스진초 4기] 

목록 보기
1/11

상속성

  • 기존의 클래스로 새로운 클래스를 작성합니다.(코드의 재사용)
  • 두 클래스를 부모와 자식으로 관계를 맺어줍니다.
  • 자손은 조상의 모든 멤버를 상속 받습니다.(단! 생성자, 초기화 블럭 제외)
  • 자손의 멤버 개수는 조상보다 적을수 없습니다. (같거나 많다 자손 >= 조상)
  • 자손의 변경은 조상에 영향을 미치지 않습니다.

상속의 예시 코드

class animal{
	 String species_name;
	 String sound;
	 String habitat;
	 int avg_age;
	
	 void info() {
		System.out.println( "동물의 종:" + species_name);
		System.out.println( "울음소리:" + sound);
		System.out.println( "서식지:" + habitat);
		System.out.println( "평균 수명:" + avg_age);
	}
	
} // 동물 클래스!


class cat extends animal{
	 String characteristic;
	 
	 void info2() {
		System.out.println( "특징:" + characteristic);
	}
		
}// 동물 클래스를 상속 받은 고양이 클래스


public class Main {

	public static void main(String[] args) {
		cat Bengal = new cat();
		Bengal.species_name = "벵갈";
		Bengal.sound = "야옹";
		Bengal.habitat = "아시아";
		Bengal.avg_age = 18;
		Bengal.characteristic = "충성심이 강함";
		
		Bengal.info();
		Bengal.info2();

	}

}

결과

캡슐화

  • 접근 제어자는 데이터를 보호하고 외부로부터의 접근을 제한하기 위해 사용됩니다. 이는 시스템의 안정성과 데이터 무결성을 유지하는 데 도움이 됩니다.

  • 외부에서는 필요하지 않고 내부적으로만 사용되는 부분을 숨기기 위해 접근 제어자가 사용됩니다. 이를 통해 시스템을 더욱 효율적이고 안전하게 운영할 수 있습니다.

접근 제어자

private : 같은 클래스
(default) : 같은 패키지
protected : 같은 패키지 + 자손(다른 패키지)
public : 접근 제한 없음

캡슐화의 예제 코드

class watch{
	private int hour; 
	private int miniute;
	private int second;
	
	void nowtime(int hour , int miniute , int second) {
		this.hour = hour;
		this.miniute = miniute;
		this.second = second;
		
		if(hour <=24 && miniute <=60 && second <=60) {
			System.out.print("현재시간은 :" +hour+":"+miniute+":"+second );
		}
		
	}
	
}

public class Main {

	public static void main(String[] args) {
		
		watch apple = new watch();
		
		apple.nowtime(2,24,30);
	}

}

private 접근 제어자를 사용하여 외부 접근을 차단하고, 메소드의 매개변수를 통해서만 데이터에 접근할 수 있도록 구현하였습니다.

결과

추상화

  • 미완성 설계도, 미완성 메서드를 갖고 있는 미완성 클래스 입니다.
  • 인스턴스 생성 불가 합니다.
  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능 합니다.
  • abstract 를 사용 합니다

코드

abstract class player{
	abstract void volume(int p);
	abstract void machine(String p);
	
}

class cd extends player{
	void volume(int p) {
		System.out.println("볼륨 :" +p);
	}
	
	void machine(String p) {
		System.out.print("기계 :" +p);
	}
	
}



public class Main {

	public static void main(String[] args) {
		cd sony = new cd();
		
		sony.volume(5);
		sony.machine("소니 cd 플레이어");
		
		
	}

}

결과

다형성

  • 여러 가지 형태를 가질 수 있는 능력
  • 조상 타입의 참조변수를 사용하여 자손 타입 객체를 관리합니다. 이를 통해 객체 지향 프로그래밍의 다형성을 구현하고, 유연한 코드 작성이 가능해집니다.
  • 자손 타입의 참조변수로 조상타입의 객체를 가리킬 수 없습니다.

코드

class phone{
	
	void call(String a) {
		System.out.println(a+"에게 전화를 겁니다.");
	}
	
	void shutdown() {
		System.out.println("휴대폰을 종료합니다");
	}
	
	void turn_on() {
		System.out.println("휴대폰을 실행시킵니다.");
	}
}

class smartphone extends phone{
	void facetalk(String a) {
		System.out.println(a+"에게 영상 통화를 겁니다.");
	}
	
	void instagram(String a) {
		System.out.println("인스타 그램 을 실행시킵니다.");
	}
}



public class Main {

	public static void main(String[] args) {
		
		phone iphone14 = new smartphone();
		
		iphone14.call("김송아 쌤");
		iphone14.shutdown();
	}

}

참조 타입을 phone 으로 했기 때문에 인스타 그램과 영상통화 함수는 실행시키지 못합니다.

결과

profile
안녕하세요

0개의 댓글