일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 재정의
- react
- 리액트
- Render
- 다형성
- SpringFramework
- 스프링
- Maven
- reactjs
- 스프링 게시판
- mybatis
- rest
- 지족동
- Ajax
- spring
- 스프링부트
- 스프링게시판
- mysql
- Gradle
- spring게시판
- 컴포넌트
- 스프링프레임워크
- springboot
- Restful
- Java
- 자바
- State
- spring framework
- Stateless
- 둔산동
- Today
- Total
Dev.GA
[JAVA] 객체지향 프로그래밍이란? 본문
객체지향 프로그래밍이란?
1. 객체지향 프로그래밍이란?
객체지향 프로그래밍(Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론이다.
줄여서 OOP라 부르며, 단어 뜻 그대로 프로그램(실제세계)를 객체(사물)라는 기본 단위로 나누고 이 객체들간의 상호작용을 기본개념으로 한다.
객체지향 프로그래밍(OOP)은 프로그램을 유연하고 변경하기 쉽게 만들기 때문에 재사용성이 용이하여 대규모 프로젝트에서 많이 사용되는 방법론이다. 프로그램 개발과 유지보수가 용이하다는 점이 가장 큰 장점으로 꼽힌다.
2. 객체지향 vs 절차지향
비교 |
절차지향 언어 |
객체지향 언어 |
장점 |
- 처리속도가 빠르다 - 초기 프로그래밍 언어로 컴퓨터의 처리구조와 비슷해 실행속도가 빠르다 |
- 코드 재사용성이 용이하다 - 개발(코딩)이 간단하다 - 유지보수가 쉽다 - 대규모 프로젝트에 적합하다 |
단점 |
- 유지보수가 어렵다 - 대규모 프로젝트에 부적합하다 - 프로그램 분석이 어렵다 |
- 처리속도가 느리다 - 객체에 따른 용량증가 - 설계단계에 시간이 많이 소요된다 |
객체지향의 특징 4가지(추상화, 캡슐화, 상속, 다형성)
1. 추상화(Abstraction)
객체지향에서 추상화란 객체에서 공통된 속성과 행위를 추출하는 것을 의미한다.
예를들어, 게임 프로그램을 개발하며 캐릭터가 소지하는 다양한 무기들이 있다. 칼, 삽, 곡갱이, 총, 활 등 여러가지 무기들이 존재하는데
이들의 기능적인 내용은 다르지만 공통적인 속성과 행위를 개념으로 무기라는 클래스를 정의할 수 있다.
이렇듯 추상화는 다른 객체들과 구분되는 핵심적인 부분에 집중하여, 복잡도를 관리할 수 있게 해준다.
2. 캡슐화(Encapsulation)
캡슐화는 연관있는 변수와 메소드를 묶어주는 작업을 말한다.
접근 제어 지시자[public, private, protected]를 통해 외부로부터의 접근을 제한하여 객체내에서만 접근이 가능하도록 해준며,
이를 정보은닉이라 한다.
외부의 클래스 혹은 모듈에 의존적인 프로그램의 경우 변경이나 오류에 취약해지는데, 정보은닉을 통해 이러한 결합도를 낮추며 응집도를 높여준다.
3. 상속(Inheritance)
클래스 개념이 도입되면서 상속을 통해 부모클래스의 속성과 기능을 이어받아(상속받아) 사용하는 것을 말한다.
프로그램을 개발하다보면 중복되는 속성과 기능을 개발해야하는 일이 발생되는데 상속을 사용한다면 중복되는 기능을 반복하여 작업하지 않고 작업을 할 수 있게 해준다.
- 자식클래스는 상속을 통해 부모클래스의 속성과 기능을 물려받는다.
- 또한, 다형성을 통해 변경이 필요한 부분을 변경하여 사용할 수 있다.
4. 다형성(Polymorphism)
다형성이란 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 동일한 변수, 함수명 등이 다양한 방법으로 기능하는 것을 말하며
오버라이딩(Overriding), 오버로딩(Overloading)이란 형태로 제공된다.
'Dev.Back-End > JAVA' 카테고리의 다른 글
[JAVA] 상속(Inheritance)이란? (1) | 2018.02.28 |
---|---|
[JAVA] static과 인스턴스(Instance) (0) | 2018.02.13 |
[JAVA] String <-> Date 형변환 (0) | 2018.02.13 |
[JAVA] 접근제어자(public, private, protected) (0) | 2018.02.13 |
[JAVA] 생성자(constructor)와 this (0) | 2018.02.12 |