티스토리 뷰

JAVA

[Java] 객체지향 프로그래밍(OOP)

단미라이프 2022. 3. 21. 10:42
반응형

 

 

1. 객체지향프로그래밍(Object Oriented Programming)

 

  • 자바는 대표적인 객체지향 프로그래밍 언어이다.
  • 실제세계를 객체라는 단위로 나누고 객체들간의 상호작용을 의미한다.
  • 즉, 프로그램을 여러개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것이다.

 

객체란 무엇일까?

 

  • 객체(Object)는 우리 주변에 있는 모든 것이 될 수 있다.
  • 예를 들어 TV, 컴퓨터, 책, 건물, 의자, 사람 등 모두 객체가 될 수 있다.
  • 객체는 자신만의 고유한 특성과 행동을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하면서 존재한다.
  • 객체는 크게 속성(필드, field)동작(메소드, method)으로 구성되어 있다.
    • 예, 학생의 속성 : 이름, 학년, 학번 등
    • 예, 학생의 동작 : 공부하다,  밥먹다, 놀다 등

 

2. 객체지향프로그래밍과 절차지향프로그래밍

  객체지향프로그래밍 절차지향프로그래밍
처리방식 문제를 여러개의 객체로 나누어 처리 문제를 여러개의 함수로 나누어 처리
장점 - 코드 재사용이 용이하다
- 유지보수 쉽다
- 대형프로젝트에 적합하다
- 처리 속도가 빠르다
- 실행 속도가 빠르다
단점 - 처리속도가 상대적으로 느리다
- 객체가 많으면 용량이 커진다
- 설계시 많은 시간과 노력이 필요하다
- 유지보수가 어렵다
- 대규모 프로젝트에 부적합하다
JAVA, Python, C# 등 C언어

 

 

 

 

객체지향프로그래밍과 절차지향프로그래밍

  • 자판기를 객체지향프로그래밍으로 구현하면, 위와 같이 여러 통들과 버튼들, 자판기 엔진, 디스플레이 객체들을 추출하고, 이 객체 사이의 관계를 설계한 뒤 각 객체를 메스드와 필드로 작성하고 클래스로 캡슐화하면 된다.
  • 자판기를 절차지향프로그래밍으로 구현하면, 위와 같이 흐름도를 설계하고 흐르도 상의 동작들을 함수로 작성하여 흐름도에 따라 동작이 순서대로 실행되도록 작성한다.

 

 

 

 

3. 객체지향프로그래밍 특징

 

캡슐화(Encapsulation)

 

  • 캡슐화란 관련된 필드와 메소드를 하나로 묶고 실제 구현내용을 외부로부터 감추는 기법으로 정보은닉할 수 있다.
  • 외부에서는 공개된 메소드를 통해 접근할 수 있다.
  • 캡슐약을 생각해보면 이해하기 쉬운데, 캡슐에 든 약은 어떤 성분인지 언떤 색인지 보이지 않으며 외부의 접근으로부터 안전한 상태와 같습니다.

 

 

상속(Inheritance)

 

  • 상속이란 상위클래스의 모든걸 하위 클래스가 이어 받는 것이다.
  • 즉, 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법이다.
  • 상속이 필요한 이유는 코드의 중복을 없애기 위함입니다. 코드의 중복이 많아지면 개발단계와 유지보수에서 많은 비용이 소요되기 때문에 코드 중복은 피하는 것이 좋습니다.

 

 

추상화(Abstraction)

 

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

 

 

다형성(Polymorphism)

 

  • 사전적 의미로는 다양한 형태로 나타날 수 있는 능력을 의미한다.
  • 다형성은 같은 이름의 메소드를 호출하더라도 객체에 따라 다르게 동작하는 것을 말한다.
  • 상위클래스의 동작을 하위클래스에서 다시 정의하여(오버라이딩, Overriding)하는 것 또한 다형성으로 볼 수 있다.
  • 하나의 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메소드를 여러개 만드는 오버로딩(Overloading) 또한 다형성의 사례로 볼 수 있다.

 

 

  • 예를 들어 강아지, 고양이, 병아리 클래스는 Animal 클래스를 상속받아 소리내기(speak())라는 메소드를 호출하지만 자신의 특징에 맞게 다시 구현하여 사용된다.

 

반응형

'JAVA' 카테고리의 다른 글

[Java] 메소드(methond)와 생성자(constructor)  (0) 2022.03.23
[Java] 클래스(class)의 개념  (1) 2022.03.22
[Java] 리스트 (List, ArrayList)  (0) 2022.03.15
[Java] 배열  (2) 2022.03.14
[Java] 반복문(for문, while문, do-while문)  (0) 2022.03.12
댓글
반응형
공지사항