[Java] 객체 지향의 특징 - 추상화

주재완·2024년 1월 27일
0

Java

목록 보기
6/13
post-thumbnail

Introduction

이 중 추상화에 대해서 다루는 것이 이 포스팅의 목적이다.

추상화

개념

추상화란 무엇일까? 추상화(abstraction)는 복잡함을 줄이고 좀 더 명확한 이해를 위해서 의도적으로 절차나 물체를 생략하는 것이다.

이 추상화는 몇가지 차원에서 이루어진다.

  • 구체적인 사물들간 공통점은 취하고 차이점은 버린다.
  • 구현할 프로그램의 실질적 목적에 맞추어 불필요한 세부 사항은 버린다.

예를 들어 "서울 노원구에 사는 김철수"와 "부산 해운대에 사는 이영희"라는 객체가 있으면 추상화를 통해서 보면 "대한민국 국민" 정도로 볼 수 있을 것 같다.

활용

그렇다면 실제 추상화가 어떻게 이루어지는지 살펴 보도록 하자.

개념적

학생 관리 프로그램을 만든다고 하자.

  1. 학생 관련 객체로 김철수, 이영희, 홍길동이 있다 가정하자.
  2. 우선 이런 객체들 마다 공통적인 속성 및 기능들이 있을 것이다. 예를 들어 아래와 같은 것들을 생각해 볼 수 있다.
이름, 학년, 반, 번호, 국어 성적, 영어 성적, 전화번호, 키, 몸무게, 달리기 속도, 머리색, 발사이즈, 취침 시간, 취미, 특기, 노래 실력...
  1. 그리고 프로그램의 목적에 따라 필요한 정보들을 살펴본다.
    • 학생 성적 프로그램
    이름, 학년, 반, 번호, 국어 성적, 영어 성적, ...
    • 학생 체육 수행평가 프로그램
    이름, 학년, 반, 번호, 키, 몸무게, 달리기 속도, ...
  2. 공통적으로 가진 요소는 이름, 학년, 반, 번호 등이 있다. 이 부분만 따로 묶어 놓는다. 그리고 사용되지 않는 머리색, 노래 실력, ... 같은 것들은 과감히 버린다.
  3. 만일 다른 기능이 필요하다면 공통적으로 가능 요소, 즉 추상화로 구현해 놓은 코드는 그대로 두고 추가로 만들 부분만 새로 만들어 주면 끝난다.

코드

실제 코드에서 추상화는 어떻게 이루어질까? 아래 예시를 살펴보도록 하자.

class Example1 {
	private int password;
    public int getPassword() {
    	return this.password;
    }
    public void setPassword(int password) {
    	this.password = password;
    }
    public void hello() {
    	System.out.println("Hello Ex1");
    }
}

class Example2 {
	private int password;
    public int getPassword() {
    	return this.password;
    }
    public void setPassword(int password) {
    	this.password = password;
    }
    public void hello() {
    	System.out.println("Hello Ex2");
    }
}

위 사례를 보았을 때, 위 코드는 필드와 getter/setter 메소드가 중복되는 것을 알 수 있다. 그리고 hello() 메소드는 내용은 다르지만 메소드 명은 동일하다. 공통적인 부분을 아래와 같이 하나로 묶어보자.

class Example {
	private int password;
    public void getPassword() {
    	return this.password;
    }
    public void setPassword(int password) {
    	this.password = password;
    }
    public void hello() {
    	System.out.print("Hello");
    }
}

그리고 만약 Example1 과 같은걸 하나 만들고 싶다면 다음과 같이 하면 된다. 이에 대해서는 뒤쪽에 나오는 상속에 조금 더 자세히 다룰 계획이다.

class Example1 extends Example {
	@Override
    public void hello() {
    	super.hello();
    	System.out.println(" Ex1");
    }
}

참고

profile
언제나 탐구하고 공부하는 개발자, 주재완입니다.

0개의 댓글

관련 채용 정보