[section 1] 객체지향 프로그래밍 심화(2) - 다형성, 추상화

수경·2022년 11월 8일
0

코드스테이츠

목록 보기
15/57
post-thumbnail

다형성 polymorphism

하나의 객체가 여러 가지 형태를 가질 수 있는 성질

자바의 다형성

한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것

➡️ 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조

❗️상위 클래스의 멤버보다 하위 클래스의 멤버가 더 많음
➡️ 선언되지 않은 멤버에 접근하게 될 수 있음
➡️ 따라서 하위 클래스 타입의 참조변수로 상위 클래스의 객체를 참조할 수 없음

Person person = new Person();
Programmer programmer = new Programmer();
Person programmer = new Programmer(); 	// 가능
Programmer person = new Person();		// 불가능

참조 타입 변수의 형변환

❗️조건
1. 상속 관계
2. 하위 ➡️ 상위 upcasting : 괄호 생략 가능
3. 상위 ➡️ 하위 downcastiong : 괄호 명시

Car car = new Car();
Vehicle vehicle = (Vehicle) car; 		// upcasting -> 괄호 생략 가능
Car car2 = (Car) Vehicle;				// downcasting -> 괄호 명시
MotorBike motorBike = (MotorBike) car;	// 상속관계 x, 불가능 -> error

instanceof

참조 변수가 해당 타입으로 캐스팅이 가능한지 여부를 리턴(boolean)

[참조변수] instanceof [타입]


추상화

공통적인 속성과 기능을 추출해서 정의하는 것

추상 메소드와 추상 클래스

  • 클래스와 메소드 앞에 abstract 키워드를 붙여서 선언
  • ❗️추상 메소드를 포함한 클래스는 자동으로 추상 클래스가 됨
  • 추상 클래스의 최상단 클래스로 갈수록 추상적
  • 추상 메소드는 바디가 정의되어 있지 않음! 시그니처만 존재!
    ➡️ 메소드의 바디가 자식 클래스에서 오버라이딩되면 객체 생성 가능
    ➡️ 상황에 맞는 메소드 구현 가능
// 추상 클래스
abstract class Animal(){
	// 추상 메소드
	public abstract void sound();
}

// 추상 클래스 Animal을 상속받은 Cat 클래스
class Cat extends Animal {
	@Overriding
	public void sound(){
    	System.out.println("야옹");
    }
}

// 추상 클래스 Animal을 상속받은 Dog 클래스
class Dog extends Animal {
	@Overriding
	public void sound(){
    	System.out.println("멍멍");
    }
}

final

더 이상 값의 변경이 불가능하다는 것을 명시하는 키워드

위치에 따라 의미가 변경됨

위치의미
클래스변경/확장 ❌ 상속 ❌
메서드오버라이딩 ❌
변수값 변경 ❌

인터페이스 interface

서로 다른 시스템, 장치, 소프트웨어를 연결해주는 장치

  • ❗️내부의 모든 멤버가 상수 필드와 추상 메소드
    ➡️ public static final public abstract
    ➡️ 생략 가능

  • 다중 상속 지원
    ✔️ 모든 멤버가 정확하게 정의되어 있지 않기 때문에 충돌의 위험이 없음

  • implements 키워드로 상속

  • ❗️인터페이스를 상속받은 하위 클래스는 모든 멤버를 구현해야 함

public class Example implements Interface1, Interface2 {
	public static final int num = 10;
    public abstract void sum();
}

회고

어렵다............... 어려워...................나... 체한다...

오늘 check point때 엔지니어님이 추상클래스와 인터페이스에 익숙해질 수 있도록(?) 카페 키오스크 프로그램을 구현하는 것을 보여주셨다.......
근데 마지막엔 거의..... 멍때림,,,, (이걸.... 내가 어떻게..? 프론트로 가고싶단 말은 절대 아님 N E V E R)

일단,

  1. 추상 클래스 / 인터페이스 개념이 아직 자리잡지 않음
  2. 어떤걸 클래스로 만들어야하는지, 어떤걸 추상화해야 하는지 미숙
  3. 엔지니어님이 만드시는 프로그램의 범위가 큰데 슈도코드로 정리되어 있진 않으니까 이게 뭔지(어디서 불러오는지) 놓칠 때가 있음
  4. 그걸 놓치기 시작하면 다른게 밀림
  5. 잠깐 다른 코드 생각하다가 정신차리니까 다 지나감 (거의 수학시간에 더하기 배우다가 고개 잠깐 돌린 사이에 미적분으로 바뀐......)

대충 이런 이유로....놓치고.......

한 번 놓치니까 뭘 놓친지도 모르게 되는 기적!

다른 분들이 이해된다고 표현을 많이 해주셔서,,, 나 따위가 감히 이해안된다고 할 수도 없었... ㅠ 글고 내가 멍청한거라서 이해 못했다기보다 그냥 못따라갔다는 표현이 더 정확할 듯... 설명은 잘 해주셨다...

분명 이해는 가는데... 오케이... 여기서 메소드 오케... 오케 당연히 여기서 추상 오키..... 캡슐화? 오케...

.... 근데 이걸 나 혼자 짜라고 하면...? 심지어 그게 내일 실습이라면?.........
^^.......... 빨리 블로깅 마무리하고 오늘 키오스크 프로그램을 혼자서 작성해봐야겠다.....

암울.... 절망....

그렇지만 어쩌겠습니까.. 해내야지.........................................

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글