[Java] 객체와 객체지향

peace w·2023년 10월 15일
0

Java

목록 보기
3/6

자바는 대표적인 객체지향언어라고 하는데, 객체와 객체지향은 과연 무엇인가?

객체?

객체는 영어로 Object라고 한다. 객체지향의 가장 기본이 되는 것이 객체이다.

우리 주변에 있는 모든 것이 객체가 될 수 있다. 객체는 각각 독립적으로 존재하며 다른 객체와 상호작용을 할 수도 있다.

자바에서는 클래스에서 정의된 데이터를 객체로 정의한다.

객체지향?

절차지향처럼 프로그램이 순서대로 실행되는 것이 아니다.

마치 자동차를 만든다고 했을 때, 수 많은 부품들의 결합과 연결로 하나의 완전한 자동차가 만들어지는 것과 같다고 할 수 있다. 객체 지향적으로 소프트웨어를 설계한다는 말의 의미는 어떤 프로그램의 일부분에 해당하는 작은 부품, 즉 객체를 먼저 만들고 이렇게 만들어진 여러 객체들을 조립해서 하나의 완성된 프로그램을 만드는 것이다.

여러 객체들을 생성하고 그 객체 사이의 관계를 설정한 뒤, 객체를 메소드와 필드로 작성하고 클래스로 캡슐화한다.

코드의 재사용성이 높고 유지보수가 용이하며, 중복 코드를 제거할 수 있다. 이런 장점 때문에 프로그래밍 언어에 객체 지향 개념과 규칙을 추가하여 사용해왔다.

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

객체지향프로그래밍을 OOP(Object Oriented Promgram) 라고한다. 프로그램 개발과 유지보수가 용이하다는 장점을 가지고 있다.

OOP는 다음과 같은 특징을 가지고 있다. 캡슐화 (Encapsulation), 상속 (Inheritance), 추상화 (Abstraction), 다형성 (Polymorphism) 의 4가지 특징을 가지고 있다.

1. 캡슐화 (Encapsulation)

  • 관련된 필드와 메소드를 하나로 묶고, 실제 구현내용을 외부로부터 감추는 기법으로 정보은닉 할 수 있다.
  • 외부에서는 공개된 메소드를 통해 접근할 수 있다.
  • 캡슐화 된 경우에는 외부의 접근으로부터 안전하다.

캡슐약을 생각하면 쉽게 이해 가능하다. 캡슐 안에 든 약은 어떤 성분과, 어떤 색을 가지고 있는지 보이지 않는다.

2. 상속 (Inheritance)

  • 이미 작성된 상위 클래스의 특성을 그대로 이어 받아 새로운 하위 클래스를 생성한다.
  • 상위 클래그에서 정의된 필드와 메소드를 물려 받고, 거기에 새로운 필드나 메소드를 추가할 수 있다.
  • 물려 받은 메소드를 수정할 수도 있다. (Overriding)
  • 동일 상위클래스를 상속하는 모든 서브클래스는 타입호환이 된다.
  • 그대로 상속 받는 것이 가능하기 때문에, 같은 코드를 여러 번 쓸 필요가 없다. 즉, 코드의 중복을 없앨 수 있다.

자바에서는 프로그램 문법상 extends 키워드를 사용하여 상속을 받을 수 있다.

3. 추상화 (Abstraction)

  • 객체에서 공통된 속성과 기능을 추출하여 정의한다.
  • 실제 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악하고 불필요한 특성을 제거하는 과정을 말한다.

4. 다형성 (Polymorphism)

  • 사전적 의미로는 다양한 형태로 나타날 수 있는 능력을 의미한다.
  • 자바에서는 조상 타입 참조변수로 자손 타입 객체를 다루는 것을 말한다.
  • 객체와 참조변수의 타입이 일치하지 않아도 쓸 수 있다는 것.
  • 같은 이름의 메소드를 호출하더라도 객체에 따라 다르게 동작한다. 즉, 같은 이름의 메소드가 상황에 따라 다른 역할을 수행하는 것이다.
  • 상위클래스의 메소드를 하위클래스에서 다시 정의(오버라이딩, Overriding)하는 것 또한 다형성으로 볼 수 있다.
  • 하나의 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메소드를 여러개 만드는 오버로딩(Overloading) 또한 다형성의 사례로 볼 수 있다.

참고

[Java] 객제지향 프로그래밍(OOP)
4. 객체지향 개념과 자바
객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화

profile
더 성장하자.

0개의 댓글