본문 바로가기
Java

[Java] 객체지향 언어의 특징

by 작은돼지 2022. 7. 31.

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

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 여러 개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것이다. 객체는 서로 메시지를 주고받고, 협력하여 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경에 용이하게 만든다.

 

SOLID 원칙

단일책임원칙(SRP): 하나의 클래스는 하나의 책임만 가져야 한다. 변경이 일어날 때 파급력을 최소화해야 한다.

 

개방폐쇄원칙(OCP): 소프트웨어 요소는 확장에는 열려있고 변경에는 닫혀있어야 한다.

다형성을 이용해도 클라이언트 코드의 변경이 일어나기 때문에 OCP 원칙을 지키기 위해서는 객체를 생성해주고 연관 관계를 맺어주는 별도의 조립, 설정자가 필요하다.

 

리스코프치환원칙(LSP): 프로그램의 객체는 언제든지 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

하위 클래스는 상위 클래스(인터페이스)의 규약을 위반하지 않고 지켜야 한다.

, 오버라이딩을 할 때 잘못된 재정의를 하면 안 된다. 인터페이스를 구현한 구현체를 믿고 사용하기 위한 원칙.

 

인터페이스분리원칙(ISP): 특정 클라이언트를 위한 여러 개의 인터페이스가 하나의 범용 인터페이스보다 낫다.

 

의존관계역전원칙(DIP): 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안 된다.

구현체에 의존하지 말고, 인터페이스에 의존하라

 

 

1. 캡슐화

필드와 메서드를 하나의 클래스로 묶는 것

객체 내부 구조를 감추고, 객체가 제공하는 (필드) 또는 메서드를 통해서만 접근 가능

객체를 모듈화할 수 있어서 독립성 및 이식성이 좋음

정보 손상 및 오용을 방지

 

- 접근제어자(modifier)

public 모두 접근 가능
protected 같은 패키지 내 또는
다른 패키지의 자손 클래스에서 조상 클래스의 protected 접근 가능
(default) 같은 패키지 내
private 같은 클래스 내

*클래스 앞: public, default

*멤버 앞: 모두 사용 가능

 

- Java Bean 규약

기본 생성자

private 속성

public으로 선언된 getter/setter 메서드를 통해 속성에 접근

 

2. 상속

이미 작성된 클래스(조상)의 모든 속성과 메서드를 물려받는 것

필요에 따라 새로운 멤버를 추가하거나, 재정의할 수도 있음

중복 코드 제거, 다형성 활용 가능

 

- 오버라이딩

상속 관계에서 조상클래스의 메서드를 자손클래스에서 재정의하는 것(구현을 재정의)

부모의 메서드와 이름, 매개변수, 반환타입이 같아야 함

접근제어자는 부모의 것보다 같거나 더 넓은 범위로 해야 함

부모보다 더 큰 예외를 선언할 수 없음

 

cf.오버로딩

과적하다 라는 의미

같은 이름의 메서드를 더 정의하는 것

메서드 이름은 같지만 매개변수 리스트가 다름(타입, 개수, 순서)

반환타입은 상관 없음

 

3. 추상화

복잡함을 간소화하기 위해 공통 부분, 핵심 부분을 추출하여 표현하는 것

 

추상클래스: abstract 키워드, 추상 메서드를 가질 수 있는 클래스, 인스턴스화 불가, 상속을 통해 하위 클래스가 구현

추상메서드: abstract 키워드, 선언부만 있고 구현부가 없는 메서드, 상속 받은 클래스는 반드시 구현을 해야 함

인터페이스: 관련 기능의 집합, 추상 메서드와 상수만으로 이루어진 개체, 클래스는 implements 하여 추상 메서드를 구체화

 

4. 다형성

여러 가지 형태를 가질 수 있는 것으로, 한 타입의 참조 변수로 여러 타입의 객체를 참조할 수 있도록 다형성을 구현

부모 클래스의 변수에 자식 클래스의 인스턴스를 할당할 수 있다.

동적바인딩: 실행 시에 변수가 실제로 참조하는 객체의 타입을 기준으로 메서드를 호출(오버라이딩)

 

다형성의 장점

인터페이스를 구현한 구현체를 실행 시점에 유연하게 변경할 수 있다.

(+클라이언트를 변경하지 않고, 서버의 구현을 유연하게 변경할 수 있다.)

 

+

그렇다면, 좋은 객체 지향 프로그래밍이란? 유연하고 변경에 용이하다는 것 = 다형성 극대화

인터페이스만 알면 구현체의 내부 로직을 몰라도 된다.

구현체 자체를 변경하거나 내부 구조의 변경이 일어나도 클라이언트는 영향을 받지 않음. (확장, 변경에 용이)

프로그램을 설계할 때 역할(인터페이스)과 구현(구현 클래스, 구현 객체)을 명확히 분리하여 설계

, 인터페이스의 변경은 영향이 큼. 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.


https://www.yes24.com/Product/Goods/24259565

 

Java의 정석 - 예스24

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com

https://abcdefgh123123.tistory.com/336

 

좋은 객체 지향 프로그래밍이란(feat.배달의 민족 김영한)

안드로이드 어플을 자바로 개발하기도 해보고, 백엔드 공부를 위해 자바 스프링을 잠깐 다뤄도 보았다. 그러나 아직 객체 지향이 정확히 무엇인지.. 명확한 느낌이 오지 않는 상태에서 이것저것

abcdefgh123123.tistory.com