이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
인터페이스 자바는 순수 추상 클래스를 더 편리하게 사용할 수 있는 인터페이스라는 기능을 제공한다. 순수 추상 클래스 package poly.ex4; public abstract class AbstractAnimal { public abstract void sound(); public abstract void move(); } 인터페이스는 class 가 아니라 interface 키워드를 사용하면 된다. 인터페이스 <code
추상 클래스 - 2 순수 추상 클래스: 모든 메서드가 추상 메서드인 추상 클래스 앞서 만든 예제에서 move() 도 추상 메서드로 만들어야 한다고 가정해보자. 이 경우 AbstractAnimal 클래스의 모든 메서드가 추상 메서드가 된다. 이런 클래스를 순수 추상 클래스라 한다. move() 가 추상 메서드가 되었으니 자식들은 AbstractAnimal 의 모든
추상클래스 동물(Animal) 과 같이 부모 클래스는 제공하지만, 실제 생성되면 안되는 클래스를 추상 클래스라 한다. 추상 클래스는 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다. 대신에 상속을 목적으로 사용되고, 부모 클래스 역할을 담당한다. abstract class AbastractAniaml {...} 추상 클래스는 클래스를 선언할 때 앞에
다형성 활용 지금까지 학습한 다형성을 왜 사용하는지, 그 장점을 알아보기 위해 우선 다형성을 사용하지 않고 프로그램을 개발한 다음에 다형성을 사용하도록 코드를 변경해보자. 아주 단순하고 전통적인 동물 소리 문제로 접근해보자. 개, 고양이, 소의 울음 소리를 테스트하는 프로그램을 작성해보자. 먼저 다형성을 사용하지 않고 코드를 작성해보자. package poly.ex1; public
다형성과 메서드 오버라이딩 다형성을 이루는 또 하나의 중요한 핵심 이론은 바로 메서드 오버라이딩이다. 메서드 오버라이딩에서 꼭! 기억해야 할 점은 오버라이딩 된 메서드가 항상 우선권을 가진다는 점이다. 그래서 이름도 기존 기능을 덮어 새로운 기능을 재정의 한다는 뜻의 오버라딩이다. 앞서 메서드 오버라이딩을 학습했지만 지금까지 학습한 메서드 오버라이딩은 반쪽짜리다.
다형성에서 참조형 변수는 이름 그대로 다양한 자식을 대상으로 참조할 수 있다. 그런데 참조하는 대상이 다양하기 때문에 어떤 인스턴스를 참조하고 있는지 확인하려면 어떻게 해야할까? Parent parent1 = new Parent(); Parent parent2 = new Child(); 여기서 Parent 는 자신과 같은 parent 의 인스턴스도 참조할 수 있고, 자식 타입인 Child 의
캐스팅 Parent poly = new Child() 와 같이 부모 타입의 변수를 사용하게 되면 poly.childMethod() 와 같이 자식 타입에 있는 기능은 호출할 수 없다. package poly.basic; public class CastingMain { public static void main(String[] args) { Parent poly = new Child(); // ploy.childMethod(); // 컴파일 에러 // 다운캐스팅(부모
다형성 시작 객체지향 프로그래밍의 대표적인 특징으로는 캡슐화, 상속, 다형성이 있다. 그 중에서 다형성은 객체지향 프로그래밍의 꽃이라 불린다. 앞서 학습한 캡슐화나 상속은 직관적으로 이해하기 쉽다. 반면에 다형성은 제대로 이해하기도 어렵고, 잘 활용하기는 더 어렵다. 하지만 좋은 개발자가 되기 위해서는 다형성에 대한 이해가 필수다. 다형성(Polymorphism)은 이름 그대로 "다양한 형태",
super - 부모 참조 부모와 자식의 필드명이 같거나 메서드가 오버라이딩 되어 있으면, 자식에서 부모의 필드나 메서드를 호출할 수 없다. 이때 super 키워드를 사용하면 부모를 참조할 수 있다. super 는 이름 그대로 부모 클래스에 대한 참조를 나타낸다. 다음 예를 보자. 부모의 필드명과 자식의 필드명이 둘다 value로 똑같다. 메서드도 hello()로
접근 제어 상속 관계와 접근 제어에 대해 알아보자. 참고로 접근 제어를 자세히 설명하기 위해 부모와 자식의 패키지를 따로 분리하였다. 이 부분에 유의해서 예제를 만들어보자. 접근 제어자를 표현하기 위해 UML 표기법을 일부 사용했다. + : public # : protected ~ : default