(학) (공) (자)

01.15(11일차)

만석이 2024. 1. 15. 12:52

1교시

---두가지 타입변환---
자료형 변환
클래스 객체타입변환

---클래스 타입변환---

1.자동형변환과 강제형변환이있다.
2.단 자료형 형변환에 비해 타입변환이 가능한 범위가 상당히 좁다
3.클래스의 타입변환은 서로 상속관계에 있는 클래스 사이에서만 변환가능하다.


---클래스의 자동타입변환---

1. 개발자가 직접 명시하지 않아도 자동으로 변환이 일어나는 것을 '클래스 자동타입 변환'이라고한다.

2. 클래스 자동타입변환은 상속관계에 있는 자식클래스의 객체를 부모타입의 객체로 변환하는것.

  부모클래스명 변수명 = new 자식클래스명();


3. 이미있는 자식객체 부모타입으로 변환

부모클래스명 변수명 = 자식객체변수명;

4. 기본자료형끼리 비교할때 ==은 값이 같은지 비교 하지만 객체끼리 비교할 때 는 주소값이 같은지 비교한다.

5. 타입을 변환한다고 객체가 바뀌는것이 아닌 객체는 보존되 사용만 부모객체 처럼 한다.

6. 자동타입변환은 반드시 자식클래스의 객체를 부모타입으로 변환할때 적용 할수있다. // 데이터자료형 변환과는 개념다름

7. 1차 상속관계가 아니더라도 상위 계층의 타입으로 변환 할수있다.

8. 같은 상위 계층을 가지더라도, 타입 변환을 시도하려는 두클래스간의 상속관계가 없다면 타입변환은 불가능하다.

9.부모타입으로 변환한 객체는, 더이상 자신의 클래스에 추가한 필드나, 메서드를 사용할수없다.

10.부모클래스에 선언된 필드만 사용할수있다. // 단, 부모클래스의 메서드를 오버라이딩한 경우 자식클래스의 메서드를 호출된다. 


---자식객체의 메서드 실행되는이유---

1.메서드가 실행 시점에서 성격이 결정되는 동적바인딩 때문이다.
2.프로그램의 컴파일 시점에서 부모클래스는 자신의 멤버함수밖에 접근할수 없으나 실행시점에서 동적 바인딩이 일어나 
 부모가 자식 클래스의 멤버함수에 접근하여 실행수있다.

---동적바인딩의 작동---

1.클래스 계층구조
1-1 자바에서 동적바인딩은 클래스 계층구조에서 발생한다.
1-2 클래스는 상속하더나 인터페이스를 구현함으로써 계층을 갖는다.
1-3 이 계층에서 메서드의 오버라이딩이 가능하기 때문이다. 

2.메서드 오버라이딩
2-1 자식클래스는 부모 클래스의 메서드를 오버라이딩 할 수 있다.
2-2 이때, 자식클래스의 메서드와 내용만 다른 메서드를 정의한다.

3.실행시 동적 바인딩
3-1 메서드가 호출될 때, 실제로 실행될 메서드는 객체의 실제 타입에 따라 결정된다.
3-2 메서드실행시 클래스 타입을 기반으로 어떤 메서드를 호출할지 동적으로 결정된다.

2교시

---자동형변환 예시---

class Car{}

class Bus extends Car{};

class ShcoolBus extends Bus{};



public class Ex2_Class_Casting {
public static void main(String[] args) {

Car c1 = new ShcoolBus(); //1차 상속관계가 아니더라도 자동타입변환 가능하다.
Bus c2 = new Bus();
Bus b2 = new ShcoolBus();



}

}



--- 클래스의 강제 타입변환---

부모타입으로 변환을 했지만 자식클래스의 필드에 접근하고 싶을 때 가 있다.

자바의 규칙으로 자식 클래스의 필드에 접근할수 없으므로 다시 자식클래스의 타입으로 변환을 해서 접근할수있도록 해야한다.
이를 클래스의 강제 타입 변환이라고한다.
 



---강제 타입변환 방법---

일회성 타입변환
((자식클래스명)객체변수명).메서드명();


여러번 접근타입변환
객체변수명 = (자식클래스명)부모타입 객체 변수명;


자식타입으로 다시 변환을 해줌으로써 부모타입에서 사용하지 못했던 자식들의 필드나 메서드를 다시 사용할수있다.

단, 모든 부모타입 객체를 자식 타입으로 변환할수있는것은 아니다. 반드시 부모타입으로 자동 형 변환 되었던 자식 객체를 다시 자식타입으로 변환할 때만

강제 타입 변환을 사용할수있다.


---다형성---

1. 객체 지향 프로그래밍의 대표적인 특징

2. 하나의 타입으로 다양한 객체를 사용할수 있다는것

3. 부모의 클래스 타입 하나로 여러가지 자식 객체들을 참조하여 사용함으로써 다형성을 구현할수있다.

4. 클래스의 타입변환이 존재하는 이유는 다형성을 구현하기 위함이다.

5. 완벽한 다형성을 구현하기 위해서는 상속+오버라이딩+타입변환의 개념을 숙지해야한다.

6.객체가 특정 클래스의 필드가 되면서, 하나의 부품처럼 사용될수있다. 이때 교체할 부품을 교체할 일이 생기면 우리는 다형성을 구현함으로써 코드의 수정을 최소화할수있다.

 

3교시

---추상화---

공통성과 본질을 모아 추출하는것

기존 클래스들의 공통적인 요소를 모아 클래스를 만들어내는 기술

공통적인 속성과 행위를 모아 정의하면, 반복적인 코드를 줄일수있고, 보다 효과적인 클래스간의 관계를 설정하여 유지보수가 용이해진다.


---추상메서드---

1. header만 작성하고 body는 작성하지 않고 남겨둔 미완성의 메서드
2. 다형성을 위해 메서드의 선언은 통일해야 하지만, 실제로 구현하는 내용은 자식클래스마다 달라야 할때 
3. 부모클래스의 메서드는 비워두고 자식 클래스에서 오버라이딩 하여 구현할수있다. 
4. 추상메서드를 선언할 때 abstract키워드를 함께 표기해야한다.

5. 접근제한자 sbstract 반환형 메서드명(매개변수);

---추상클래스---
1. 추상메서드가 한개 이상 정의 되어 있는 클래스
2. 추상 메서드를 포함하고 있다는 것을 제외하고 일반 클래스와 다르지 않다
3. 추상 클래스에도 생성자가 있으며, 필드와 메서드도 가질수있다.
4. 추상 클래스 또한 abstact키워드를 통해 자신이 추상클래스임을 명시해야한다. 


접근제한자 abstract class 클래스명{

필드
생성자
메서드(추상메서드 포함)
}  


5. 추상클래스를 상속받은 자식클래스는 부모가 가지고있는 추상메서드를 무조건 받아둬야한다. 오버라이딩을 해서 가지고있어야한다.
6.추상클래스는 일반적인 방법으로는 객체를 생성할수없다. 
7.추상클래스는 자신의 기능을 자식이 완성시키도록 조건부 상속하여 자식 클래스가 생성될 때 객체화된다.


---인터페이스---

모든 메서드가 추상메서드인 추상클래스를 '인터페이스'라고 부른다.
인터페이스는 추상메서드와 상수로만 이루어져 있으며 일반적인 방법으로는 객체를 만들수없기 때문에 클래스라고 부를수없다.
인터페이스는 객체를 매개체, 즉 객체를 사용하는 방법을 제공하는 새로운 블록이라고 할수있다.
자식클래스의 생성자의 힘을 빌려 객체를 생성해야한다.
따라서 인터페이스도 자신이 가지고있는 추상메서드를 구현해줄 클래스를 작성해야한다.
인터페이스를 구현해주는 클래스를 '구현클래스'라고한다.