본문 바로가기
언어/JAVA

[객체 지향 프로그래밍]

by 코딩맛집 2023. 1. 25.

6.1 객체 지향 프로그래밍

OOP (Object Oriented Programming)

만들고자 하는 완성품인객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법이다.

 

객체란?

물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것

객체 = 속성(필드) + 동작(메소드)

예로 자동차는 색상, 모델명 등의 속성과 달린다, 멈춘다 등의 동작이 있다. 

 

객체 모델링이란?

현실 세계의 객체를 SW 객체로 설계하는 것을 객체 모델링이라고 한다. 객체 모델링은 현실 세계의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정이라고 볼 수 있다.

 

객체의 상호작용?

현실 세계에서 일어나는 모든 현상은 객체와 객체 간의 상호작용으로 이루어져 있다. 객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작한다. 객체들 사이의 상호작용 수단은 메소드이다. 객체가 다른 객체의 기능을 이용하는 것이 바로 메소드 호출이다.

 

객체의 상호작용은 객체 간의 메소드 호출을 의미하며 매개값과 리턴값을 통해서 데이터를 주고 받는다.

 

메소드 호출

리턴값 = 전자계산기객체.메소드(매개값1, 매개값2);

객체에 도트(.) 연산자를 붙이고 메소드 이름을 기술하면 된다. 도트 연산자는 객체의 필드와 메소드에 접근할 때 사용한다. 매개값은 메소드를 실행하기 위해 필요한 데이터이다.

 

객체 간의 관계

객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있다.

종류: 집합, 사용, 상속 관계

 

집합 관계에 있는 객체는 하나는 부품이고 하나는 완성품이다.(자동차 - 부품)

사용 관계는 객체 간의 상호작용이다. (객체는 다른 객체의 메소드를 호출하여 원하는 결과를 얻어낸다. 사람-자동차)

상속 관계는 상위 객체를 기반으로 하위 객체를 생성하는 관계를 말한다. (일반적으로 상위 객체는 종류를 의미하고, 하위 객체는 구체적인 사물에 해당한다. 기계-자동차)

 

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

1. 캡슐화 : 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것을 말한다. 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다. 필드와 메소드를 캡슐화하여 보호하는 이유외부의 잘못된 사용으로 객체가 손상되지 않도록(1) 하는데 있다. 자바 언어는 캡슐화된 멤버를 노출시킬지 말지 결정하기 위해 접근 제한자를 사용한다. 접근 제한자는 객체의 필드와 메소드의 사용 범위를 제한함으로써 외부로부터 보호한다. 또한 

 

2. 상속 : 상위 객체는 자신의 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해준다. 상속은 상위 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여주고 개발 시간을 절약해 주어 효율적이다. 상속은 상위 개체의 수정으로 모든 하위 개체들의 수정 효과를 가져오므로 유지 보수 시간을 최소화시켜준다. 

 

3. 다형성 : 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 자바는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다. 부모 타입에는 모든 자식 객체대입될 수 있고, 인터페이스 타입에는 모든 구현 객체대입될 수 있다. 다형성의 효과로 객체는 부품화가 가능하다. 예를 들어 자동차를 설계할 때 타이어 인터페이스 타입을 적용했다면 이 인터페이스를 구현한 실제 타이어들은 어떤 것이든 상관없이 장착(대입)이 가능하다.

 

6.2 객체와 클래스

객체는 설계도를 바탕으로 만들어진다. 자바에서 설계도는 클래스이다. 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다. 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다. 그리고 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.

객체 지향 프로그래밍 개발의 3가지 단계 : 클래스 설계 → 객체 생성 → 객체 사용

 

지금까지 단순히 main() 메소드만 작성해서 실행할 목적으로 클래스를 이용했다. 하지만 main() 메소드가 없는 클래스는 객체 생성 과정을 거쳐 사용해야 한다.