티스토리 뷰
반응형
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 |
댓글
반응형
공지사항