객체 지향 프로그래밍 OOP

Jason·2023년 9월 4일
0

내맘대로 해석하는 개발 용어

해당 개념은 계속 보면서 더 좋은 비유가 떠오를 때마다 수정 예정

OOP(Object Oriented Programming)

현실 세계의 시스템을 가상 환경에서 객체(Object) 라는 개념으로 표현하는 프로그래밍 종류 중 하나이다.

현실 세계에 존재하는 것을 가상세계로 옮겨와서 시스템으로 만든 것 같다.

Object(객체)

고유의 속성, 상태, 기능 을 가지는 물리적, 추상적인 모든 것이다.

돌, 공기, 사람, Action, 과일 이 세상의 모든 것들은 객체가 될 수 있다.

Class (집합)

객체의 공통적이고 일반적인 모든 속성, 기능, 행위 등을 추상화 하여 묶어둔 것이다.

Abstraction(추상화)

사물들의 공통적 특징을 추출하여 하나의 개념으로 만드는 행위이다.
모델링 할 시스템에 종속적으로 추상화 작업이 진행 되는 특징이 있다.

Generalization(일반화)

하위의 객체가 가진 일반적인 특징을 상위 개념으로 부각시켜 하나로 개념화, 계층화 하는 과정이다.

is a 관계 : 사람은 동물이다.
구체적인 것은 일반적인 것이라 할 수 있다.
(반대로 모든 동물이 사람은 아니다.)

Specialization(구체화) / Inheritance(상속)

일반화된 특성(상위 객체) 을 가져와 각자(하위 객체) 만이 갖고 있는 속성이나 행위를 추가, 수정하여 구체화 하는 것을 말한다.

is a 관계 (+@ 상속 관계는 공유하지 않는다.)

Realization(구현)

추상화된 것을 목적에 맞도록 구현하는 것을 말한다.

나는 먹는다() 무엇을 what? 어떻게 How?

Interface

순수한 abstract method 만 있는 abstract class 이다.
해당 interface로 상위 abstract 클래스의 abstract method 를 공유하여 overriding 할 필요 없이,
interface 로 떼서 implements (구현) 하는 방향으로 만들어 낼 수 있다.

Association (협력)

아무 연관 없지만, 필드에 존재하며 서로 관계를 갖는 연관 관계
생성자 호출 없이 바로 사용한다는 점에서 계속 갖고있다는 느낌이 강하다.

// Field
private MemberService memberService;

public void addMember() {
	// MemberService memberService = new MemberService();
	memberService.addMember();
    // 이후 코드
}

Dependency (의존성)

A ----> B A가 B를 사용한다. 필요에 의해서 사용하는 관계 (메소드에 포함)
'필요할 때' 사용한다는 느낌이 강하다.

// Method
강의하다(){
	B b = new B(); // 메소드 하위에 생성하여 쓰고 버림
	b.사용();
}

Polymorphism (다형성)

상위의 일반적인 객체는 하위의 객체가 모두 보유한 특성이기에 하위 클래스를 인스턴스화 및 상위에 대입하여 사용 가능하다.

부모님을 대신해 자식이 부모님 이름으로 경조사에 참여 가능. (상속관계의 다형성)
운전하는 법을 알면 스펙이 어떤지 상관없이 SUV, 경차 모두 운전 가능하다. (인터페이스의 다형성)

Encapsulation (절차은닉 / 정보은닉)

캡슐화란 어떠한 객체가 가진 특징 및 상황에 따라 객체의 정보를 전부, 일부 공개, 비공개 하는 행위이다.
현실 세계와 같이 감추고 싶은건 감출 수 있게 만드는 행위로 간주된다.

나의 개인 정보는 나의 의사에 따라 낯선 타인에게는 알려주지 않고, 가족이나 친구에게는 공개할 수 있다.

profile
어제보다 매일 1% 성장하고 있습니다.

0개의 댓글