객체지향프로그래밍
현실 세계에서 어떤 제품을 만들 때 부품을 먼저 만들고, 이 부품들을 하나씩 조립해서 완성품을 만듭니다.
소프트웨어를 개발할 때에도 부품에 해당하는 객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 '객체 지향 프로그래밍(OOP)' 이라고 합니다.
객체란?
객체란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것을 말합니다.
ex) 자동차, 자전거, 책, 사람, 학과, 강의, 주문 등
객체는 속성과 동작으로 구분하고 자바는 이러한 것을 각각 속성(필드), 동작(메서드) 라고 부릅니다.
객체의 상호작용
현실 세계에서 일어나는 모든 현상은 객체와 객체 간의 상호 작용으로 이루어져 있습니다. 예를 들어 사람은 전자계산기의 기능을 이용하고, 전자 계산기는 계산 결과를 사람에게 리턴하는 상호작용을 합니다.
객체 지향 프로그램에서도 객체들을 다른 객체와 서로 상호작용하면서 동작합니다. 객체들 사이의 상호작용 수단은 메서드 입니다.
객체가 다른 객체의 기능을 이용할 때 이 메서드를 호출합니다.
메서드 호출을 통해 객체들을 데이터를 서로 주고 받습니다. 메서드 이름과 함께 전달하고자 하는 데이터를 괄호() 안에 기술하는데, 이러한 데이터를 '매개값'이라고 하고 메서드의 실행 결과를 호출한 곳으로 돌려주는데 이를 '리턴값'이라고 합니다.
int result = add(10, 20);
객체 간의 관계
객체는 단독으로 존재할 수 있지만 대부분 다른 객체와 관계를 맺고 있습니다. 관계의 종류에는 집합 관계, 사용 관계, 상속 관계가 있습니다.
집합 관계
완성품과 부품의 관계를 말합니다.
사용 관계
다른 객체의 필드를 읽고 변경하거나 메서드를 호출하는 관계를 말합니다.
상속 관계
부모와 자식 관계를 말합니다. 자동차가 기계의 특징(필드, 메서드)을 물려받는다면 기계(부모)와 자동차(자식)는 상속 관계에 있다고 볼 수 있습니다.
객체 지향 프로그래밍의 특징 ⭐️⭐️⭐️⭐️⭐️
객체 지향 프로그램의 특징은 4가지가 존재합니다. 캡슐화, 상속, 추상화, 다형성 입니다.
1. 캡슐화
클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것을 말합니다.
필드와 메서드를 캡슐화를 통해 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위함입니다.
객체 지향 프로그램에서 캡슐화를 구현하기 위한 방법은 접근 제한자와 Getter/Setter 입니다.
2. 상속(위에서 아래로)
부모 객체가 가지고 있는 필드와 메서드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있도록 하는 것을 말합니다.
상속을 하는 이유는 코드의 재사용성을 높이고, 유지 보수 시간을 최소화 시켜주기 때문입니다.
3. 다형성
다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미합니다.
비유적으로 표현하자면, 어떤 중년의 남성이 있다고 했을 때 그 남자의 역할이 아내에게는 남편, 자식에게는 아버지, 부모님에게는 자식, 회사에서는 회사원, 동아리에서 총무 등 상황과 환경에 따라서 달라지는 것과 비슷하다고 할 수 있습니다.
다형성을 구현하기 위해서는 메서드 오버라이딩(재정의 기술), 메서드 오버로딩(재정의 기술), 자동 타입 변환이 필요합니다.
4. 추상화(아래에서 위로)
추상화의 핵심이 되는 개념은 "공통성과 본질을 모아 추출" 한다는 것 입니다.
예를 들면, 서울의 지하철 노선도는 서울의 지리를 추상화 시켜서 보여주는 대표적인 예라 할 수 있습니다. 중요한 부분을 강조하기 위해 불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현하는 것과 관련이 있습니다.
자바에서 추상화를 구현할 수 있는 문법 요소로는 추상 클래스(abstract class)와 인터페이스(interface)가 있습니다.
객체 지향적 설계에 있어서 인터페이스는 어떤 객체가 수행해야 하는 핵심적인 역할만 규정해두고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하게 됩니다.
이것을 객체 지향 프로그래밍에서는 역할과 구현의 분리라고 하며, 이를 통해 유연하고 변경이 용이한 프로그램 설계가 가능합니다.
추상 클래스와 인터페이스 중 언제 어떤 걸 사용해야 하나요?
추상 클래스와 인터페이스의 사용은 목적에 따라 다릅니다.
추상 클래스는 기본적으로 클래스이며 이를 상속, 확장하여 사용하기 위한 것 입니다.
반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대한 동일한 사용방법과 동작을 보장하기 위해 사용합니다.
어떤 객체가 특정 인터페이스를 구현하였다면, 그 객체는 인터페이스의 기능을 모두 갖추고 있음을 보장합니다.
그리고 인터페이스를 통해 해당 객체를 제어할 수 있음을 보장하는 것 입니다.
Interface와 Abstract class 의 차이점 - 인프런 | 커뮤니티 질문&답변
누구나 함께하는 인프런 커뮤니티. 모르면 묻고, 해답을 찾아보세요.
www.inflearn.com
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번
inpa.tistory.com
'Java > 기초문법' 카테고리의 다른 글
[Java] ASCII 와 유니코드 (1) | 2024.09.23 |
---|---|
[Java] Java를 통해 숫자 야구 게임 만들기 (0) | 2024.09.23 |
[Java] 컬렉션 자료구조 - LIFO와 FIFO 컬렉션 (1) | 2024.09.16 |
[Java] 컬렉션 자료구조 - Map 컬렉션 (0) | 2024.09.16 |
[Java] 컬렉션 자료구조 - Set 컬렉션 (0) | 2024.09.16 |