본문 바로가기

안드로이드 자바 코틀린 기초 지식/자바 기초지식

객체 지향의 4대 특성(JAVA)

- 캡슐화(Encapsulation) : 정보은닉(information hiding)

- 상속(Inheritance) : 재사용

- 추상화(Abstraction) : 모델링

- 다형성(Polymorphism) : 사용편의

 

추상화: 

  • '추상화'란, 어떤 실체로부터 공통적인 부분이나 특성들을 한 곳에 모은 것을 의미한다.
  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
  • 클래스들의 중요하고 공통된 성질들을 추출하여 슈퍼 클래스를 선정하는 개념이다

예를 들어,

고양이
속성 : 이름, 나이 성 : 이름, 나이
기능 : 짖는다 기능 : 짖는다

이런 공통적인 기능이나 속성이 있을때 animal이라는 추상 class에 구현해놓고 상속시키서 모델링 한다면 중복 코드가 현저히 줄어들 것이다.

 

상속 : 

  • 상위 개념의 특징을 하위 개념이 물려받는 것

다형성 : 

  • 다형성이란 하나의 객체나 메소드가 여러가지 다른 형태를 가질 수 있는 것을 말합니다.
  • 자바에서 다형성을 나타내는 것으로는, 오버라이딩과 오버로딩 그리고 상속받은 객체의 참조변수 형변환등이 있다.
  • 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다.

상속받은 객체에 대해서 형변환이 의미하는 것은, 객체에 속한 멤버들에 대한 사용범위가 달라진다는 것을 의미합니다. 

  • 업캐스팅(upcasting) : 자식클래스의 타입의 레퍼런스 변수를 부모클래스 타입으로 형변환 하는 것. (타입변환 구문 생략 가능, 자동 형변환 됨)
    • Person p1 = new Dancer()  [형변환 생략]
  • 다운캐스팅(downcasting) :  부모클래스 타입의 레퍼런스 변수를 자식클래스 타입으로 형변환 하는 것. (타입변환 구문 생략 불가, 형변환 타입을 명시해야됨)
    • Dancer d1 = (Dancer) p1 [형변환 반드시!!!]

 

더보기
public class Polymorphism {
	
	public static void main(String[] args){
		Parent p = new Child();
		p.printOut();	
	}
}

class Parent {
	void printOut() {
		System.out.println("parent");
	}
}

class Child extends Parent{
	@Override
	void printOut() {
		System.out.println("child");
	}
}

// 결과 : child

 

캡슐화 (Encapulation) :

  • 관련있는 변수와 메소드를 하나의 클래스로 묶어 주고, 접근 제어 지시자를 사용해 외부로부터 정보를 접근할 수 없게 하는 방법이다. 
  • 캡슐화의 가장큰 장점은 정보은닉(Information Hiding)에 있습니다.
  • 캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고 객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.

 

출처: https://server-engineer.tistory.com/219 [임대리 개발일지:티스토리]

 

 

자바의 접근 제어자


public : 접근 제한 없음
protected: 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능
default : 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근 가능
private: 자기 자신의 클래스 내에서만 접근 가능