객체 지향 프로그래밍의 4개 기둥

sua_ahn·2022년 9월 2일
0

프로그래밍 입문

목록 보기
3/7
post-thumbnail

1. 추상화 Abstraction

1) 변수의 값, 함수의 세부 구현 내용을 몰라도 이름만 알면 사용 가능하도록 한 것
2) 공통부분으로 묶어 정의하는 것

✨ 추상화 잘하는 방법

  • 이름 잘 짓기 - 직관적으로 알 수 있게끔!
  • 문서화(docstring) 하기 - 클래스, 함수 등에 설명 추가
  • type hinting - 파라미터와 리턴 값의 자료형 힌트 주기

2. 캡슐화 Encapsulation

1) 객체의 일부 구현 내용에 대해 외부로부터의 직접적인 접근을 제어하는 것 (출력, 수정 등)
2) 객체의 속성과, 그것을 사용하는 행동을 하나로 묶는 것

⇨ 프로그램 안정성을 위한 자기구속

🔐 캡슐화 방법

  • Python
1) 캡슐화하고자 하는 변수나 메소드 앞에 underbar
   : 클래스 밖에서 직접 접근하지 말라는 경고 표시
2) 메소드를 통해 변수에 간접 접근하기 (변수를 메소드로 캡슐화)
   : getter, setter 메소드, 데코레이션, 추상클래스
   
cf) Python은 완벽한 캡슐화를 지원하지 않음
    클래스 밖에서의 접근을 어렵도록 하는 기능(double underbar)가 있으나, 
    name mangling된 새로운 이름으로 접근 가능
  • Java
1) 캡슐화하고자 하는 변수나 메소드 앞에 접근지정자 "private"
   : 클래스 밖에서 직접 접근 차단
2) 메소드를 통해 변수에 간접 접근하기 (변수를 메소드로 캡슐화)
   : getter, setter 메소드
   

3. 상속 Inheritance

부모 클래스(super class)의 코드를 자식 클래스(sub class)에게 물려주는 것

🧬 상속 시 쓰이는 개념

  • 오버라이딩(재정의) : 상속 받은 메소드를 자식에 맞게 덮어 써서 수정
  • 오버로딩(중복정의) : 파라미터의 개수나 타입을 달리하여 같은 이름의 메소드를 정의

📍 다중상속

여러 부모 클래스로부터 상속받을 수 있음
But, 부모를 참조할 때의 애매함 때문에 몇몇 언어에선 지원 X

상속 우선순위를 신경쓰지 않기 위해서는

1) 부모 클래스끼리 같은 이름의 메소드를 갖지 않아야 함
2) 부모-자식 클래스 간 같은 이름의 메소드는 오버라이딩해야 함

4. 다형성 Polymorphism

여러 형태를 가질 수 있음

1) 클래스 다형성

: 클래스 내 하나의 변수가 여러 클래스의 인스턴스를 가리킬 수 있음

✔ 구현 방법

  • 리스트와 반복문 활용
    : A클래스 내 정의된 리스트에 다른 클래스의 인스턴스 추가 → A클래스 내 for문으로 리스트에 들어있는 다른 클래스의 인스턴스 호출

  • 추상클래스* 활용
    : 추상클래스인 부모클래스를 호출 → 추상클래스는 인스턴스를 갖지 못하므로 자식클래스들의 인스턴스가 호출됨

§ 추상클래스

추상화된 클래스 = 공통부분으로 묶인 클래스

  • 순수 가상 함수 · 추상메소드의 오버라이딩 강제
    → 오버라이딩을 하지 않으면 부모클래스처럼 추상클래스가 됨

  • 부모클래스로의 사용이 목적이므로 인스턴스 생성 불가
    → 상속관계를 통해서만 사용가능

2) 함수·메소드 다형성

: 입력 파라미터가 여러 타입을 가질 수 있음

  • 파라미터 개수 변경 : 옵셔널 파라미터, 가변인자 사용
  • 파라미터 순서 변경 : 함수 사용 시 파라미터 이름 명시
profile
해보자구

0개의 댓글