. 객체 지향 프로그래밍이란
본문 바로가기
프로그래밍 공부/CS 공부

객체 지향 프로그래밍이란

by 불냥이_ 2021. 4. 27.

객체 지향 프로그래밍이란?

 

 

Class와 Object의 차이는?

Class : Object를 만들어 내기 위한 템플릿

Object : Class에 data를 투입하여 구현해야할 대상

Instance : Object를 메모리에 할당하여 실제로 사용할 때 Instance라고 한다. 

(object와 Instance는 본질적으로 같지만, class로 이걸 만들 것이다! 라고 생각했을 때, '이걸'이 의미하는 것은 Object이고, class로 이걸 만들었다! 했을 때, '이걸'이 의미하는 것은 Instance이다. 어렵다. 씁.)

 

field와 method란?

Field : class 안에서 선언되는 변수를 말한다. field를 선언할 때는 접근 지정자, field의 type, field의 이름, 이 세가지를 정해줘야 한다.

접근 지정자에는 public과 private이 있으며, public은 다른 클래스로부터도 접근 가능하지만, private는 클래스 내부에서만 접근 가능하다.

 

접근제어자(Access Modifier) : 

Public : 외부 Class 및 Object 에서도 접근 가능하다.

Private : 같은 Class 안에서만 접근 가능할 수 있고, 상속된 하위 Class 및 Object에서도 접근 불가능하다. '정보 은닉'을 위한 장치

Default : 같은 패키지 안에서 사용가능하다. (동일 패키지가 무슨 뜻일까)

Protected : 상속 받은 Class에게만 정보 공개를 허용하고 싶을 때 쓰는 접근제어자이다.  상위 Class에 접근가능하다. 하지만 Object에서는 접근 불가능하다.

(Class는 접근가능하지만 Object는 접근 불가능하다라는 것이 무슨 뜻이지?)

 

 

method : class에서 작업을 수행하기 위한 명령문들의 집합 (즉, Class를 가지고 시행할 함수들의 집합이다.)

 

abstract란?

자식 클래스들의 공통분모 역할만을 위한 클래스이며, 이 자체로는 객체를 생성할 수 없다.

 

Abstract class와 Interface의 차이

Abstract class : Abstract method가 하나라도 존재하는 Class를 말한다. Class의 기능을 이용하거나 확장하기위해 사용되었다. 다중 상속의 모호성때문에 하나만 상속받을 수 있다.

(※ Abstract method : 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것. 만약 Ab. method가 하나라도 존재한다면 해당 method를 가지고 있는 class는 Ab. class가 되어야한다.)

;

 

Interface : 해당 인터페이스를 구현한 객체들에 대해서 동일한 동작을 약속하기 위해 존재한다.

 

 

override과 overloading의 차이

overloading : Class에 MEthod를 정의할 때, 같은 이름이지만 서로 다른 매개변수의 형식을 가지고 있는 Method를 여러개 정의하여 다양한 유형의 호출에 응답할 수 있도록한다.

overriding : 상위 Class가 가지고 있는 Method를 하위 Class가 재정의해서 사용. 즉, 자식 Class가 부모 Class로부터 Method 이름만 가져오고, 실제 구현 내용은 다르게 덮어버리는 것이다. 단, 이름, 매개변수, 반환형은 동일해야한다. 

 

 

상속이란?

기존에 존재하는 클래스에 추가 메소드를 넣어 만든 클래스

 

 

객체지향 프로그래밍 5원칙

1 .SRP (Single Responsibility Principle) : 단일 책임 원칙

객체는 오직 하나의 책임을 가져야한다.

클래스 하나는 하나의 목적을 위해서만 존재해야된다는 것이다. 이렇게 단일 책임 원칙은 클래스의 목적을 명확히 함으로써 구조가 난잡해지거나 수정 사항이 불필요하게 넓게 퍼지는 것을 에방하고 기능을 명확하게 분리할 수 있게한다.

 

2. OCP (Open-Closed Principle) : 개방-폐쇄 원칙

 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다.

즉, 객체 기능의 확장을 허용하고 스스로의 변경은 피해야한다. 만약 한 클래스의 메소드를 수정하고 싶다면, 그 클래스의 메소드를 수정하는 것이 아니라 상속한 하위 클래스에서 별도의 메소드로 만들어 구현한다는 것이다.

 

3. LSP (Liskov Substitution Principle) : 리스코프 치환 원칙

 자식 클래스는 언제나 부모 클래스를 대체할 수 있다. 

부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 잘 작동해야한다는 것. 부모 클래스가 지원하던 메소드 등을 자식 클래스도 지원해야한다. 그렇지 않으면 is-a 곤계가 망가져 다형성을 지킬 수 없게 된다.

 

4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙

 클라이언트에서 사용하지 않는 메서드는 사용해선 안된다.

인터페이스에서 SRP를 지킨다고 생각하면 된다. 특정 클라이언트를 위하 ㄴ인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

 

5. DIP (Dependency Inversion Principle) : 의존성 역전 원칙

 추상성이 높고 안정적인 고수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존해서는 안된다.

 

 

객체 지향 프로그래밍 4가지 특성

1. 캡슐화 (Encapsulation)

  ㆍ변수와 함수를 하나의 단위로 묶는 것을 의미한다.

  ㆍ데이터를 외부에서 접근하는 것을 방지하고, 함수를 통해서만 접근할 수 있게 한다.

  ㆍ클래스의 인스턴스 생성을 통해 클래스 안에 포함된 멤버 변수와 메소드에 쉽게 접근할 수 있다.

   1) 상태-행위 캡슐화 (데이터 캡슐화) : 객체는 상태와 행동을 하나의 단위로 묶는 자율적 실체

   2) 사적인 비밀의 캡슐화 (은닉화) : 외부에서 객체의 상태를 변경할 수 없도록 은닉

 

2. 상속 (Inheritance)

 상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다. 

 

3. 다형성 (Polymorphism)

 하나의 변수나 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다. 즉, 동일 요청에 대해 서로 다른 방식으로 응답할 수 있또록 만드는 것.

 - Overriding : 상속받은 메소드를 재정의함

 - Overloading : 동일한 메소드가 매개변수 타입, 갯수 차이에 따라 다르게 동작

 

4. 추상화

 인터페이스로 클래스들의 공통적인 특성(변수, 메서드)들을 묶어 표현하는 것

 

 

 

 

 

 

 

 

참고)

객체 지향 프로그래밍/원칙 - 나무위키 (namu.wiki)

[JAVA] 5. 오버로딩과 오버라이딩 (tistory.com)

자바 인터페이스와 추상클래스. 서론 | by Dope | Webdev TechBlog

📚OOP의 5원칙과 4가지 특성 (velog.io)

 

 

 

'프로그래밍 공부 > CS 공부' 카테고리의 다른 글

Node.js phase 간단 정리  (0) 2021.05.02
디자인 패턴 (작업중...)  (0) 2021.04.28
HTTPS (대칭키와 비대칭키)  (0) 2021.04.22

댓글