[CS]OOP의 4가지 특징

2025. 9. 16. 23:14·cs/dev
728x90

1. 추상화(Abstraction)

공통의 속성이나 기능을 묶어 이름을 붙이는 것을 추상화라고 할 수 있다.
- 객체 지향적 관점에서 클래스를 정의하는 것을 추상화라고 할 수 있다. 예를 들어 사자, 고양이, 강아지가 있을 때 우리는 이것을 각자 객체라고 하며, 이 객체들의 공통적인 동물이라고 표현할 수 있는데 이때 동물을 묶는 행위를 추상화라고 한다.

 

2. 캡슐화(encapsulation)

특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것을 캡슐화라고 한다.
- 쉽게 말해 모듈화를 의미한다. 이러한 캡슐화를 통해 정보를 객체 안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보 은닉(외부 접근 제한) 효과도 자연스럽게 따라온다.

 

 

캡슐화와 정보은닉의 차이

정보 은닉 기법은 대표적으로 3가지 정도가 있다

  • 객체의 구체적인 타입 은닉(=업캐스팅)
  • 구체적의 필드 및 메소드 은닉(=캡슐화)
  • 구현 은닉(=인터페이스&추상 클래스)

정보 은닉 기법 중 하나가 캡슐화라는 것이다.

 

3. 상속(inherutance)

상위 개념의 특지을 하위 개념이 물려받는 것을 상속이라 한다.
- 상속에서 주의해야할 점은 계층도, 조직도 관점(가족 관계도와 같은)에서 이해하면 안된다는 점이다. 분류도 관점에서 이해해야한다. 하위 클래스는 상위 클래스의 역할을 대신할 수 있으면서 고유의 역할도 수행할 수 있어야 한다. 아버지와 아들을 예시로 들면 아들은 아버지의 역할을 할 수 있으면서 아들 고유의 역할도 수행할 수 있어야 하지만 그렇지 못한다. 이와 같은 부분에서 상속을 사용할 때는 주의해야 한다. 상속은 코드의 재사용성을 높이고 확장성을 높여준다.

 

출처: Inpa Dev 👨‍💻:티스토리

업캐스팅

  • 정의: 자식 클래스가 부모 클래스 타입으로 형변환
  • 특징
Parent p = new Child();
형변환을 선언하지 않아도 자동으로 형변환이 된다.
  • 업캐스팅을 사용하는 이유: 공통적으로 할 수 있는 부분을 만들어 간단하게 다루기 위해서이다. 상속 관계에서 상속 받은 서브 클래스가 몇 개이든 하나의 인스턴스로 묶어서 관리할 수 있기 때문이다.

예를들어 다음과 같이 부모 클래스 Shape에 각각 자식 클래스 Rectangle, Triangle, Circle가 상속 관계를 맺었다고 하자.

본래라면 Rectangle, Triangle, Circle 클래스는 서로 다른 타입이니 각각 타입을 정의해서 사용해야 한다.

Rectangle[] r = new Rectangle[];
r[0] = new Rectangle();
r[1] = new Rectangle();

Triangle[] t = new Triangle[];
t[0] = new Triangle();
t[1] = new Triangle();

Circle[] c = new Circle[];
c[0] = new Circle();
c[1] = new Circle();

출처: Inpa Dev 👨‍💻:티스토리

 

하지만 상속 관계를 맺어 부모 클래스로 업캐스팅이 가능하다면, 다음과 같이 하나의 타입으로 묶어 배열을 구성할 수 있게 된다.

Shape[] s = new Shape[];
s[0] = new Rectangle();
s[1] = new Rectangle();
s[2] = new Triangle();
s[3] = new Triangle();
s[4] = new Circle();
s[5] = new Circle();

 

다운캐스팅

  • 정의: 부모 클래스가 자식 클래스 타입으로 캐스팅 
  • 특징
Parent p = new Childe();
Child c = (Child)p;

업캐스팅이 먼저 선행되어야 한다.
명시적으로 타입을 지정해주어야한다.
  • 다운캐스팅을 하는 이유: 다운캐스팅의 목적은 업캐스팅한 객체를 다시 자식 클래스 타입의 객체로 되돌리는데 목적을 둔다. (복구)

 

4. 다형성

같은 모양의 코드가 다른 행위를 하는 것을 나타낸다. 자바에서는 Overriding, Overloading이 그 방법이다.

 

Overriding 오버라이딩

  • 상위클래스로부터 상속받은 메서드를 하위클래스에서 재정의
  • → 단, 메서드 이름 / 매개변수 / 반환 타입은 동일해야 함

Overloading 오버로딩

  • 메서드 이름은 동일하나 매개변수 개수 또는 타입을 다르게 지정

 

check)

1. OOP의 4가지 특성은 무엇인가?

2. 캡슐화와 은닉화의 차이?

3. 업캐스팅과 다운캐스팅이란?

4. 오버로딩과 오버라이딩의 차이?

 

출처: 개발자 인큐티비 백엔드개발 자바 기술면접 | 개발자 기술 면접 )IT 서비스 탑티어 회사 신입개발자 JAVA 단골 질문1

https://www.youtube.com/watch?v=a-f0HxYRNiM

 

출처: https://inpa.tistory.com/entry/JAVA-☕-업캐스팅-다운캐스팅-한방-이해하기 [Inpa Dev 👨‍💻:티스토리]

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%97%85%EC%BA%90%EC%8A%A4%ED%8C%85-%EB%8B%A4%EC%9A%B4%EC%BA%90%EC%8A%A4%ED%8C%85-%ED%95%9C%EB%B0%A9-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

☕ JAVA 업캐스팅 & 다운캐스팅 - 완벽 이해하기

자바의 참조형 캐스팅 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 타입 변환 혹은 형변환(캐스팅) 이라고 한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive ty

inpa.tistory.com

 

728x90
반응형

'cs > dev' 카테고리의 다른 글

[CS]인터페이스와 추상클래스?  (0) 2025.09.17
[CS]클래스와 객체, 인스턴스의 차이가 뭔가요?  (0) 2025.09.16
[Spring]spring과 spring boot  (0) 2025.09.16
[Spring]JPA란 무엇인가요? (ORM, SQL Mapper)  (0) 2025.09.16
[CS]프로시저란 무엇인가요?  (0) 2025.09.14
'cs/dev' 카테고리의 다른 글
  • [CS]인터페이스와 추상클래스?
  • [CS]클래스와 객체, 인스턴스의 차이가 뭔가요?
  • [Spring]spring과 spring boot
  • [Spring]JPA란 무엇인가요? (ORM, SQL Mapper)
lakedata
lakedata
lakedata 님의 블로그 입니다.
  • lakedata
    lakedata 님의 블로그
    lakedata
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • cs (82)
        • dev (28)
        • sec (29)
        • ops (25)
      • 자격증 (32)
        • 정보처리기사 (20)
        • 정보보안기사 (1)
        • aws dva (6)
        • aws dop (2)
      • IT서적 (27)
        • 클린아키텍처 (10)
        • 객체지향의사실과오해 (7)
        • 오브젝트 (10)
      • 코테 (42)
        • 알고리즘 (20)
        • 백준 (13)
        • 프로그래머스 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    docker
    Java
    Security
    Spring
    CS
    AWS
    SQL
    알고리즘
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
lakedata
[CS]OOP의 4가지 특징
상단으로

티스토리툴바