코딩항해기

[JAVA] 객체지향언어 특징 본문

JAVA

[JAVA] 객체지향언어 특징

miniBcake 2024. 6. 23. 14:07

 

객체지향언어의 4가지 특징

캡슐화, 상속, 추상화, 다형성

 

 

[요약]

캡슐화 코드의 내용이 외부로부터 보호되어 있어 코드 내용을 다 알지 못해도 기능을 사용할 수 있다는 특징
상속 부모(상위) 클래스의 내용(필드,메소드)을 자식(하위) 클래스가 extends(상속)하면 자식이 별도로 정의하지 않아도 부모의 내용(필드,메소드)을 모두 사용할 수 있다는 특징
추상화 유연하고 변경에 열려있는 프로그램을 설계하기 위해 역할과 구현을 분리할 수 있다는 특징
다형성 객체 간의 관계를 보다 유연하고 확장이 용이한 설계가 가능하도록 할 수 있다는 특징

 


 

[캡슐화]

캡슐화란 클래스 안의 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어

데이터를 외부로부터 보호하는 것을 의미한다.

 

데이터 보호(data protection), 데이터 은닉(data hiding)의 특징을 가진다.

data protection이란 외부로부터 클래스에 정의된 속성과 기능을 보호하는 것이고,

data hiding은 내부의 동작을 감추고 외부에는 필요한 부분만 노출하는 것을 말한다.

 

data hiding 덕분에 우리는 코드의 내용이 공개되어 있지 않아도 기능을 사용할 수 있다.

 

캡슐화는 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자하는 목적이 있다.

이런 목적을 달성하기 위해 접근제한자를 사용하여 데이터를 보호하고 은닉한다.

 

접근제한자

접근제한자 적용 가능 대상 적용 불가 대상 접근 가능 대상
public 클래스, 필드, 생성자, 메소드   모든 대상 (다른 패키지 포함)
protected 필드, 생성자, 메소드 클래스 같은 패키지, 자식(하위)클래스
(default) (생략가능) 클래스, 필드, 생성자, 메소드   같은 패키지
private 필드, 생성자, 메소드 클래스 해당 클래스내부 (getter / setter)

 


 

[상속] Inheritance

기존에 선언된 클래스의 멤버(생성자는 해당되지 않음)를 새롭게 만들 클래스에서 사용하고 싶을 때

상속을 받으면 자식(하위)클래스가 부모(상위)클래스의 속성과 기능을 사용할 수 있는 것을 말한다.

 

상속문법

class Parent{
//부모클래스의 멤버(필드, 메소드)
}

class child extends Parent {
//부모클래스의 멤버
//자식클래스의 멤버 추가, 오버라이딩(부모메소드 구현부 재정의) 가능
}

 

부모 클래스는 슈퍼클래스, 기반클래스, 상위클래스라고 부르기도하며,

자식 클래스는 서브클래스, 파생클래스, 하위클래스라고 부르기도 한다.

 

단, 객체지향언어 중 하나 인 java는 단일 상속만 지원한다.

 

 

오버라이딩(재정의) Overriding

 

오버라이딩은 상속관계에서 가능하며,

부모클래스에서 정의한 메소드를 자식클래스에서 수정해서 사용하고 싶을 때 사용한다.

 

이때 메소드명, 매개변수, 반환타입 (즉, 선언부)은 부모의 메소드와 동일해야한다.

어노테이션을 통해 오버라이딩된 메소드임을 알려줄 수 있다. (@override)

 

오버로딩과 단어가 유사하여 비슷하게 생각 할 수도 있지만 전혀 다른 개념이며,
차이점은 오버로딩의 경우 메소드와 생성자에서 가능하지만,
오버라이딩은 상속관계의 자식클래스에서 메소드만 가능하다는 점이다.

 


 

[추상화]

객체지향언어에서 의미한 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다.

java에서 추상화를 구현할 수 있는 문법으로는 추상클래스(abstract class)와 인터페이스(interface)가 있다.

 

추상클래스 abstract class

멤버 중 추상 메소드가 존재하는 클래스라는 의미이다.

추상메소드란, 구현부가 없이 선언만 하는 메소드로, 선언부만 존재한다.

abstract class 클래스명{
abstract 리턴타입 메소드명(자료형 매개변수);
}

*반드시 abstract를 붙여 추상메소드, 추상클래스임을 명시해주어야한다. 일반 메소드도 함께 선언 가능하다.

 

추상메소드는 상속받은 자식클래스에서 반드시 오버라이딩(재정의)하여

구현을 해야만 해당 클래스를 객체화 시킬 수 있다. (강제성부여)

 

반드시 자식 클래스에서 오버라이딩 해야하는 메소드가 있다면, 추상메소드로 선언하는 것이 좋다.

이 때 오버라이딩을 하지 않으면 오류가 발생하게 되므로 강제성이 생기게 된다.

 

이렇게 생긴 강제성은 자식클래스에서 오버라이딩을 빠뜨리는 휴먼에러를 줄여주게 된다.

 


 

[다형성]

 

어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 역할을 가질 수 있는 성질을 의미한다.

 

상속 때 정리한 오버라이딩Overriding, 그리고 오버로딩 Overloading이 대표적인 다형성의 예이다.

 

오버라이딩은 상속받은 자식클래스에서 구현부를 재정의하여

이름만 같은 다른 메소드를 만들 수 있기 때문에 다형성을 보여주고 있다.

 

오버로딩의 경우에는 메소드나 생성자의 매개변수가 개수, 타입, 순서가 다를 때 같은 이름으로 선언 할 수 있는 것을

의미하기 때문에 이 경우도 다형성에 속하게 된다. (반환타입은 영향을 주지 않는다.)