이번 12주차는 추석 연휴로 인해서 수요일까지만 진행했다.
저번주에 이어서 클래스에 대한 내용들을 지속적으로 보고 있다. 이번주는 클래스 타입 캐스팅과, 추상 클래스, 매개변수 다형성에 대해 살펴보았다.
우선, Java에서 무언가를 형전환 하는 과정을 살펴보면, 작은 단위에서 큰 단위로 형전환 시 자동적으로 형전환이 이루어지지만, 상위 단위를 하위 단위로 바꿀 땐 명시적 타입 캐스팅을 진행한다. 클래스도 이와 마찬가지로 클래스 타입 캐스팅이 가능했다.
Class UpCasting
상속 트리의 위쪽 방향으로 하위 유형을 상위 유형으로 캐스팅하는 행위를 일컫는다. 하위 클래스 객체가 상위 클래스 참조 변수에 의해 참조되는 경우, 별도의 과정 필요 없이 자동으로 형전환된다. 이는 동적 다형성과 연관시킬 수 있다.
Class DownCasting
하위 클래스 유형이 상위 클래스의 객체를 참조하는 절차를 다운캐스팅이라고 한다.
수업에서는 업캐스팅만 다루었으며, 예시로는 아래와 같이 들었었다.
[Parent Class]
public class ClassTypeCasting {
public void method1(){
System.out.println("부모클래스에 포함된 메소드1");
}
public void method2(){
System.out.println("부모클래스에 포함된 메소드2");
}
}
[Child Class]
public class ClassTypeCasting2 extends ClassTypeCasting{
@Override // 오버라이딩되었다는 명시적 선언. 가시성을 위해 작성한다.
public void method2(){
System.out.println("부모 클래스와 동일한 이름으로 자식 클래스에 포함된 메소드");
}
public void method3(){
System.out.println("부모 클래스에 없고 자식 클래스에 포함된 메소드");
}
}
[Main Class]
public static void main(String[] args) {
ClassTypeCasting2 child = new ClassTypeCasting2(); // 자식 객체를 만들고
ClassTypeCasting parent = child; // 부모 클래스에 자식 클래스의 레퍼런스를 할당한다
// 부모 클래스에 자식 클래스의 레퍼런스를 할당했기에
parent.method1(); // 이는 당연히 부모클래스에 있는 메소드가 실행되고
parent.method2(); // 이는 자식 클래스에 있는 메소드가 실행된다.
}
우리가 지금까지 사용하던 클래스의 형태는 내가 원하는 변수들을 필드에 정의하고, 생성자와 메소드로 특정 행동들을 수행하는 클래스가 완성되면, 외부에서 객체를 생성하여 접근하는 형태로 사용했다. 하지만 추상 클래스
의 경우 객체를 생성할 수 없다.
[example]
abstract class Weapon {
public void attack(){
System.out.println("주먹을 뻗는다.");
}
}
사용법은 간단하다. 그냥 abstract
라는 키워드를 붙여주면 끝이다. 이렇게 되면 외부에서 객체를 통해 접근할 수 없고, 오로지 상속을 통해서만 사용할 수 있게 된다.
그럼 오히려 불편할거 같은데? 라는 생각이 들긴 했지만 w3schools에 따르면 보안을 유지때문에 사용한다는 글을 볼 수 있었다. 실제 서비스 하는 과정이라고 생각했을 때 특정 세부정보를 숨기고 노출되어도 상관없는 몇 정보들만 노출시키는 그런 상황에 사용하는 듯 했다. 수업에서는 구체적인 예시로 사용해보진 않았다.
점점 갈수록 어려워지는게 느껴진다. 좀 더 집중해서 잘 들어야지.. ㅠㅠ