[SWAD] Ep.2 OOP(2)

GLICO·2024년 10월 24일

SWAD

목록 보기
2/12

Contents
Four Pillars of OOPs.

  • 객체지향 프로그래밍의 철학적 개념
  • 객체 중심으로 코드를 구성하는데 있어서 개발자로 하여금 소프트웨어 복잡성을 더 잘 다룰 수 있도록 해주는 원칙
  • 코드를 더 잘 조직화하고 재사용 및 관리가 되기 쉽게 함

추상화

넓은 의미의 추상화(Abstraction)

  • 사물의 중요한 특징에 집중하고 상대적으로 덜 중요한 상세 사항은 가려내는 작업

ex) 자료구조에서 추상 자료형(ADT)을 생각할 때

  • 특정 자료구조의 복잡한 구현을 생각하지 않고 기능/역할에 집중하여 고도화된 논리적 사고를 가능(사용과 구현을 분리)

사용자의 입장 : 구현은 제대로 되었을 것이다 생각하고 사용에 집중
구현자의 입장 : 각 연산이 제대로 동작하도록 구현에 집중

  • ADT 구현이 변경되어도 그것을 사용하는 프로그램은 변경되지 않음

데이터 추상화와 프로시저 추상화

  • 데이터 추상화 (Data abstraction)
    여러 자료형을 하나로 묶어 더 높은 단계로 추상화 하는 것

  • 프로시저 추상화 (Procedrual abstraction)
    함수를 어떻게 호출하고 무엇을 수행하는지만 알게하고 함수 내부 로직(구현)은 감추는 것

Abstraction is the root principle of design

  • 설계 시 추상적인 계약(요구 사항, 인터페이스)실제로 구현된 구체적인 부분(클래스, 모듈 등)과 분리하여 설계할 수 있는 능력을 줌

  • What(무엇)How(어떻게)를 분리할 수 있는 능력을 줌

  • 고수준 아이디어의 전체 아키텍처를 먼저 고려하고, 이후에 저수준의 구현 세부 사항을 다룰 수 있는 능력

캡슐화

캡슐화(Encapsulation)의 의미

  • 변수(속성)와 메소드(행위)를 캡슐(capsule)로 감싸는 개념
  • 데이터와 행위를 클래스 안으로 숨긴다라고 생각할 수 있음
  • 추상화와 관련됨 : interface만 공개하고 내부 구체 사항은 감추는 것
    정보 은닉 : 사용자가 알 필요가 없는 정보는 외부에서 접근하지 못하도록 제한

캡슐화 - 정보 은닉 예시

  • 클래스로 데이터와 함수를 묶음
  • 접근 제어자로 무엇을 공개하고 감출지 결정
class Time {
	// 데이터는 외부에서 접근 할 수 없음
	private int hour;
    
    public void setHour(int hour){
    	if(hour < 0 || hour > 24)
        	return;
        else
        	this.hour = hour;
    }
   
    public int getHour(){
        return hour;
    }
}

응집도(Cohesion)와 결합도(Coupling)

  • 응집도 : 클래스안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냄
  • 결합도 : 어떤 기능을 실행하는 데 다른 클래스에 얼마나 의존적인지를 나타냄

높은 응집도와 낮은 결합도를 유지해야 요구사항 변경에 유현하게 대처 가능

  • 캡슐화는 높은 응집도 / 낮은 결합도를 갖도록 해줌 (정보 은닉을 통해)

상속

일반화(Generalization)의 의미

  • 여러 개체들이 가진 공통된 특성을 부각시켜 하나의 개념으로 성립시키는 과정
  • OOP에서는 여러 개의 서브 클래스로부터 공통점을 찾아내어 하나의 슈퍼 클래스를 도출하는 과정을 의미함

  • 대출 계좌, 적금 계좌, 예금 계좌를 관찰해 보았을 때 잔고, 예금주와 같은 속성은 공통적으로 존재.
  • 계좌 클래스를 슈퍼 클래스로 둠

상속(Inheritence)

  • 슈퍼 클래스에 정의한 변수와 메소드를 서브 클래스가 묵시적으로 소유하게 하는 것
    공통된 속성/메소드를 반복적으로 정의할 필요 없음.
    상속 관계가 여러 단계로 구성된 것을 상속 계층 구조라고 함.

  • Is-A 관계
    An A is a kind of B가 성립하면 "A는 B의 일종이다"라고 해석하고 A클래스가 B클래스의 서브 클래스가 될 수 있음

메소드 오버라이딩(Overriding)

  • 슈퍼클래스에 정의된 메소드를 서브클래스에서 재정의 하는 것
    이름은 공유하되 각 서브 클래스의 맥락에 맞게 내용을 바꿀 수 있음

다형성

Poly(many) + morphism(form)

  • 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질
    나는 집에서 아들이지만,
    학교에서는 학생,
    식당에서는 손님.

  • Overriding과 연관됨 : 상황에 따라 여러 가지 형태를 가질 수 있음

추상 클래스(abstract class)

  • 오퍼레이션만 정의하는 것을 가상 함수 또는 추상 메소드라고 함.
  • 추상 메소드를 포함하고 인스턴스를 가질 수 없는 클래스를 추상 클래스라고 함.
  • 상속을 받은 서브 클래스는 추상 메소드를 오버라이딩해서 구현해야 함.
    서브 클래스에 구현을 일임하는 것이 추상 클래스의 목적
public abstract class HTMLElement {
	public abstract void render(); // operation
}

public class TextBox extends HTMLElement {
	@Override
    public void render(){ // method
    	// implementation here
    }
}

Recap.

Four Pillars of OOPs

  • 추상화 : 중요한 특징에 집중하고 덜 중요한 상세 내용은 가려내기
  • 캡슐화 : 속성과 행위를 캡슐로 감싸기
  • 일반화(상속) : 가진 공통된 특성을 묶어내 하나의 개념으로 추리기
  • 다형성 : 어떤 객체의 속성/기능이 상황에 따라 여러 가지 형태를 가짐

이를 위한 프로그래밍 문법적 요소

  • class, public, private : 캡슐화와 연관
  • extends, overriding, abstract : 상속, 다형성과 연관
profile
Its me Glico

0개의 댓글