추상 (Abstract)
: 설계적인 부분
자바에서는 일종의 미완성의 클래스라고 할 수 있는 추상(Abstract) 클래스를 제공
추상클래스는 직접적으로 객체 인스턴스를 생성할 수 없다.
하지만 새로운 클래스를 작성하는데 밑바탕이 되는 역할을 해줌
어느정도 미리 설계로서 틀을 갖추고 클래스를 작성할 수 있게 한다.
객체지향 : 객체는 일반적으로 말하는 물건을 의미하며
여기서 물건은 단순한 데이터가 아니고 그 데이터의 조작 방법에 대한 정보 또한 포함하고 있어
그것을 대상으로 다루는 수법을 객체지향이라고 한다.
ex)
어떠한 모양을 정의 할 때 사각형, 원, 삼각형이있다
각 도형들의 공통적인 속성은 넓이 calculateArea()를 가진다는 것이다.
+ 각자 자신의 생김새를 출력할 수 있는 display() 라는 함수 필요
-> 미리 어떠한 클래스를 구현하기 전에 이 클래스 안에는 이러한 내용이 들어갈거야 하고
설계적인 측면에서 알려주는 것을 추상
추상 클래스를 사용하려면
꼭 상속을 받아야 하며 상속받은 모든 추상 메소드는 반드시 구현을 해줘야한다.
추상의 개념을 이용하여 음악 플레이어 클래스를 구현합니다.
Player.java
abstract class Player { abstract void play(String songName); abstract void pause(); abstract void stop(); } |
Main.java
public class Main extends Player { // 자기가 상속받은 Player라는 추상클래스에서 반드시 play, pause, stop 함수 구현 public static void main (String[] args) { Main main = new Main(); // 인스턴스를 하나 만들어주기 main.play("Joakim Karud - Mighty Love"); // main에서 play를 사용 // 불러와지는 메소드 또한 static으로 선언되어야한다. main.pause(); main.stop(); } void play(String songName) { System.out.println(songName + " 곡을 재생합니다."); } void pause() { System.out.println("곡을 일시정지합니다."); } void stop(){ System.out.println("곡을 정지합니다."); } } |
추상의 개념을 이용하여 동물 클래스를 구현합니다.
Animal.java
abstract class Animal { abstract void crying(); } // Animal이라는 클래스를 상속 받은 모든 클래스는 crying이란 함수를 반드시 구현해야함을 알려준다 // Cat, Dog 클래스는 crying 함수를 구현한다 |
Dog.java
// Animal이라는 클래스를 상속 받아 사용하는 Dog클래스 public class Dog extends Animal { void crying() { System.out.println("월 월"); } } |
Cat.java
public class Cat extends Animal { void crying() { System.out.println("냐옹"); } } |
Main.java
public class Main { public static void main (String[] args) { Dog dog = new Dog(); Cat cat = new Cat(); dog.crying(); cat.crying(); } } |
최종(Final)
: 자바에서 절대 변하지 않는 특정한 것을 정하고 싶을 때는 최종(Final)을 사용
변수, 메소드, 클래스에 모두 사용 가능
변수에 사용할 경우 변하지 않는 상수
메소드가 사용할 경우 재정의가 불가능한 메소드
클래스에 사용할 경우 상속이 불가능한 클래스
Final 키워드를 사용한 변수를 다루어봅니다.
Final 키워드를 사용한 메소드를 다루어봅니다.
Final 키워드를 사용한 클래스를 다루어봅니다.
Parent.java
public class Parent { // final class Parent로 바꾸면 그 클래스는 더이상 어떠한 클래스에서도 상속을 받을 수 없다 public void show() { // public final void show()로 하면 메인 함수에서 함수를 재정의해도 그대로 Hi 출력 System.out.println("Hi"); } } |
Main.java
public class Main extends Parent{ public void show() { // 다시 한 번 똑같은 이름으로 함수를 만들게 되면 부모클래스에서 존재하는 show라는 함수를 지워버리고 자기 클래스에서 재정의(Overriding)된 새로운 함수로 실행이 된다 System.out.println("Hello"); } public static void main(String[] args) { Main main = new Main(); // Main클래스에 하나의 인스턴스를 만들기 main.show(); // 재정의(오버라이딩)를 하지않으면 Hi 라고 출력 , 이유 : 부모클래스에서 show()라는 함수를 그대로 가져옴 // 위에 함수를 재정의했기 때문에 Hello가 출력 } } |
'JAVA' 카테고리의 다른 글
자바 기초 9 (다형성) (0) | 2021.10.14 |
---|---|
자바 기초 8 (인터페이스) (0) | 2021.10.14 |
자바 기초 6 (상속) (0) | 2021.10.13 |
자바 기초 5 (클래스) (0) | 2021.10.13 |
자바 기초 4 (배열) (0) | 2021.10.13 |