자바는 객체지향<Object Oriented Programming>(OOP)언어이며, 객체지향의 특징에는 대표적으로 다섯가지 특징이 있다.
A. 상속 (Inheritance)
- 부모 클래스의 변수와 메서드를 자식 클래스가 전부 물려 받는 것.
위 경우 처럼 Child 클래스가 Parent 부모클래스를 extends를 이용하여 상속 받은 경우이다.
이 경우 Main클래스에서 Child 클래스를 정의해준뒤
Child.parent_method(); 를 호출할경우 Child클래스에서 parent_method()라는 메서드가 없음에도 , 상속을 받았기 떄문에 부모클래스의 메서드를 사용할 수 있습니다.
B, 캡슐화 (Encapsulatiin, Information Hiding)
- 객체의 변수 및 메서드를 외부 객체가 함부로 건드리지 못하게 감싸는 개념 (getter/setter)
위와 같이 캡슐화의 특성을 이용하여 name과 age를 private로 정의할시 외부 클래스에서는 name과 age를 사용 및 수정할수가 없습니다.
그럴때 사용하는 것이 getter/setter 메소드인데, 단축키(ALT+SHIFT+S)를 사용하여 쉽게 정의할 수 있습니다.
그럴경우 이런식으로 getter/setter 메서드가 정의된경우 외부에서는
이런식으로 setter 메서드를 이용하여 값을 수정하고, getter메서드를 이용하여 가져오는 방법을 사용할 수 있습니다.
C. 다형성 (Polymorphism)
- 다양한(poly) + 변형,변신(morphism)의 합성어이다.
- 하나의 객체가 여러가지 타입을 가질 수 있다는것을 의미한다.
- 자바에서는 한 레퍼런스 변수가 다른형태의 객체를 참조할수 있음을 말한다.
- 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 등의 방법이 있다.
c-1. 오버라이딩 (Overriding)
*옆의 사진과 같이 parent클래스를 상속받은 child 클래스에서
부모클래스의 parent_method를 오버라이딩으로 재정의 한뒤,
메인에서 호출할 경우 child 클래스에서의 메서드를 호출하면
아래와 같이 "hello"가 호출되고 , parent클래스에서 호출할경우 원래 메서드인 "hi" 가 호출된다.
c-2. 오버로딩 (Overloading)
*오른쪽의 이미지와 같이
같은 생성자에 다른 인자타입이나 갯수가 다를경우에,
생성자의 다형성을 이용하여 여러 인자를 갖는 생성자를 정의하여 사용할 수 있다.
c-3. 업캐스팅 & 다운캐스팅
*왼쪽 이미지와 같이 업캐스팅은 다운캐스팅처럼
따로 직접 타입을 캐스팅할 필요가 없이,
자동으로 캐스팅되는 반면
다운캐스팅은 같은 타입으로 캐스팅을 직접 해주어야만 오류가 나지않고 가능하다.
D. 추상화 (Abstraction)
- 자바에서 공통된 속성, 기능을 묶어 이름을 붙이는 것을 의미한다.
- 자바에서 추상화는 추상 클래스, 인터페이스를 통해 구현된다.
- 추상클래스 : 추상메서드를 하나 이상 포함한 추상 클래스
- 인터페이스 : 추상메서드만을 포함한 추상클래스, 다중상속가능!
*JAVA8버전부터는 인터페이스안에 default를 선언을 하면 바디가 있는 메서드도 선언이 가능하다!
- 추상클래스는 위의 Parent클래스에서 abstract를 이용하여 추상메서드를 정의해주면, 부모를 상속받은 child클래스에서는 반드시. 부모클래스의 추상메서드를 재정의 해서 사용해야만 한다.
*그리고 앞에 다형성에서 설명하였던 곳처럼 부모를 정의해서 부모의 메서드를 부를수는 없다.(부모의 메서드는 추상메서드이기 때문)
- 인터페이스는 위의 interface 부분처럼 메서드만을 정의해놓은뒤, 다른 클래스에서 implements라는 것을 이용하여 인터페이스를 상속받은후 인터페이스의 메서드를 재정의해서 사용할 수 있다.
- 인터페이스와 추상클래스의 다른점은 인터페이스 같은경우는 한 클래스에서 여러 인터페이스를 동시에 상속받을 수 있다.
'Java > Java language' 카테고리의 다른 글
[JAVA]6. 배열? (0) | 2021.08.13 |
---|---|
[JAVA]5. 삼항 연산자 / break와 continue의 차이 (0) | 2021.08.13 |
[JAVA]4. 자바 JDK와 식별자 (0) | 2021.08.13 |
[JAVA]3. 자바의 정규표현식? (0) | 2021.08.06 |
[JAVA]2. 자바의 특징(2) (0) | 2021.07.26 |
댓글