[Java] 객체지향 프로그램이란?

jjuny7712·2023년 12월 17일
0

객체지향 프로그래밍(Object-Oriented Programming, OOP)

실세계의 사물을 추상화시켜 상태와 행위를 가진 객체로 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 소프트웨어 개발 방법론이다.

객체는 상태(속성)와 해당 데이터를 처리하기 위한 행위(메서드)로 이루어져 있다. 우리 주변에 있는 사물을 프로그래밍의 대상으로 삼는것이 객체라고 할 수 있다.

메서드와 함수는 같은건가?

함수는 단독 모듈로서 그냥 호출하여 사용이 가능하지만, 메서드는 클래스안에 속해있고 클래스의 멤버 변수들을 이용해서 구현된 것을 말한다.

즉, 클래스 내부에 정의한 함수를 메서드라고 부르는 것이다.

객체(Object)는 뭐지?

객체는 현실 세계에서 식별 가능한 것 중에서 자신의 상태와 행위를 가지는 모든 것을 나타낸다. 객체는 클래스를 데이터 타입으로 해서 메모리에 생성된 것을 의미한다. 즉, 객체는 클래스를 구체화 해놓은 것이다.

클래스(Class) vs 객체(Object)

현실의 객체가 갖는 상태와 행위는 추상화되어 클래스에 정의된다.

사람은 이름, 나이 라는 상태가 존재한다.
사람은 일한다 라는 행위가 존재한다.

객체지향 프로그래밍의 특징

캡슐화(Encapsulation)

관련된 속성과 메서드를 하나의 단위로 묶어 객체를 생성하고, 외부에서는 해당 객체의 내부 구현에 직접 접근하지 못하도록 숨기는 것을 캡슐화라고 한다.

이를 통해 데이터의 은닉성을 확보하고, 객체의 메서드를 통해 상호작용하게 된다. 이로써 재사용성을 증가시킨다.

상속(Inheritance)

이미 존재하는 클래스(부모)를 기반으로 새로운 클래스(자식)를 만들 수 있는 기능을 의미한다.

상속을 통해 만들어진 자식 클래스는 부모 클래스의 속성과 메소드를 물려받을 수 있으며, 이를 통해 코드의 재사용성을 높일 수 있다. 또한, 자식 클래스에서 부모 클래스의 기능을 확장하거나 변경할 수 있다.

다형성(Polymorphism)

같은 이름의 메서드가 다양한 객체에서 다르게 구현될 수 있는 것을 말한다. 또한, 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미하기도 한다.

다형성은 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현되며, 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조하여 구현할 수 있다.

메소드 오버로딩(Method Overloading)

같은 이름의 메서드를 중복하여 정의하는 것을 말한다. 자바에서는 원래 한 클래스 내에 같은 이름의 메서드를 둘 이상 가질 수 없지만, 매개변수의 개수나 타입을 다르게 하면 하나의 이름으로 여러 메서드를 작성할 수 있다.

매개변수의 개수와 타입, 순서까지 모두 같다면 이 두 메서드의 시그니처는 같다고 할 수 있으며, 오버로딩이 되지 않는다.

메소드 오버라이딩(Method Over

상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의해서 사용하는 것을 말한다.

추상화(Abstraction)

객체의 공통적인 특성을 추출하여 인터페이스나 추상 클래스로 정의하는 것을 말한다.

객체지향 설계원칙(SOLID)

단일 책임 원칙 (Single Responsiblity Principle, SRP)

모든 클래스는 하나의 책임만을 가져야 한다는 원칙이다. 클래스가 여러 책임을 가지게 되면, 한 책임에 대한 변경이 다른 책임에 영향을 미칠 수 있다.

개방-폐쇄 원칙 (Open Closed Principle, OCP)

확장에는 열려있고 수정에는 닫혀있어야 한다는 원칙이다. 기존의 코드를 변경하지 않으면서(Close) 기능을 추가할 수 있도록(Open) 설계가 되어야 한다.

리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙이다. 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 잘 작동해야한다. 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고, 확장만 수행하도록 해야 리스코프 치환 원칙을 만족할 수 있다.

인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙이다. 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다.

의존 역전 원칙 (Dependency Inversion Principle, DIP)

의존 관계를 맺을 때 거의 변화가 없는 것에 의존하라는 원칙이다. 구체적인 클래스보다 인터페이스와 추상 클래스와 관계를 맺으라는 의미이다.

profile
차곡차곡

0개의 댓글