Java - Encapsulation & Polymorphism

iseon_u·2022년 5월 7일
0

Java

목록 보기
29/77
post-thumbnail

Encapsulation 캡슐화


접근 제어자를 사용하는 이유

  • 외부로부터 데이터를 보호하기 위해서
  • 외부에는 불필요한, 내부적으로 사용되는 부분을 감추기 위해서
  • 외부의 직접 접근을 막고 메서드를 통한 간접 접근만 허용 ✅
public class Time {
// private 접근 제어자로 외부 직접 접근 방지 ❌
		private int hour; 

// 메서드를 통한 간접 접근 허용 ✅ 
		public int getHour() { return Hour; } // getter read
		public void setHour(int hour) { // setter write
				if (hour < 0 || hour > 23) return; // 값을 보호
				this.hour = hour;

class TimeMain {
		public static void main(String[] args){
				Time t = new Time();
				t.setHour(21); // 메서드를 통한 변경
				System.out.println(t.getHour()); // 메서드를 통한 읽기

setter

  • private 멤버 변수 (iv) 의 값을 외부 public 메서드를 통해 간접 변경
  • 외부로 전달 받은 값을 멤버 변수 (iv) 에 할당
  • 조건문으로 값을 보호, 조건에 따라 return 문 적용

getter

  • private 멤버 변수 (iv) 값을 반환하는 메서드

Polymorphism 다형성


  • 여러 가지 형태를 가질 수 있는 능력
  • 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
Tv t = new SmartTv(); // 타입 불일치 OK ✅

참조변수의 타입과 객체의 일치 / 불일치 차이

SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입 일치
Tv t = new SmartTv(); // 조상 참조 변수로 자손 인스턴스 참조
  • 사용할 수 있는 멤버의 개수가 달라진다. (장점 👍)

주요 에러 🔴

Tv t = new SmartTv(); // 조상 참조변수 -> 자손 객체 허용 ✅
SmartTv s = new Tv(); // 에러, 반대는 허용 안 됨 ❌
  • 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. ❌
  • 없는 객체를 호출할 수 없기 때문에 없는 객체를 호출하면 에러 🔴
profile
🧑🏻‍💻 Hello World!

0개의 댓글