일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오산대맛집
- Eclipse
- numpy
- 노마드코더
- 관계형데이터베이스
- ubuntu
- SQL 연산자
- 이클립스
- 리액트
- REACT
- spring
- node.js
- 람다식
- Flexbox Froggy
- SQL 명령어
- 플랙스박스기본
- 자바스프링
- Hooks
- 객체지향프로그래밍
- 스프링
- spring 환경설정
- SQL
- 타입
- java spring
- SQL 문제
- Flex Box 기본
- java설치
- 환경설정
- HTML5
- 자바 스프링
- Today
- Total
이것저것
객체지향 프로그래밍이란 본문
객체지향 프로그래밍이란 OOP(Object Oriented Programming)이라고 한다.
위키백과 설명을 보면 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.
내 생각대로 의미를 파악해보자면 하나의 목적을 가진 명령어들의 모임을 객체라 하고 객체는 하나의 블록이 된다. 필요한 블록, 즉 필요한 객체를 가지고 조립을 하면 하나의 프로그램을 완성시킬 수 있다는 것 같다.
객체지향 프로그래밍이 무엇이냐 질문한다면
프로그래밍에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
라고 대답하면 된다고 한다..!!
장점
- 코드 재사용이 용이 -> 기존에 만들어진 클래스를 재사용할 수 있고 상속을 통해 확장 가능하다.
- 유지 보수가 편리 -> 수정해야 할 부분이 클래스 내부에 있으므로 해당 부분만 수정하면 된다.
- 대형 프로젝트에 적합 -> 클래스 단위로 모듈화 시켜 개발할 수 있으므로 여러 명, 여러 회 사에서 업무를 쉽게 분담하여 개발할 수 있다.
단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커질 수 있음
- 설계 시에 많은 시간과 노력이 필요
객체(Object)
객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별 가능한 것을 말한다. 물리적으로 존재하는 고양이, 강아지, 학생, 연필 등 이러한 것뿐만 아니라 추상적인 제작, 주문 등이 모두 포함된다.
객체는 속성과 동작으로 구성되어있다. 자동차를 예로 들어보면 자동차는 엔진, 핸들, 브레이크, 엑셀 등의 속성으로 이루어져 있다. 동작으로는 시동걸기, 주행하기, 창문 열기, 트렁크 열기 등이 있다.
자바에서 이러한 객체의 속성을 필드(field), 동작을 메소드(method)라고 한다.
객체 지향 키워드 5가지
1. 클래스 + 인스턴스(객체)
클래스
어떠한 객체의 상태를 나타내는 변수와 행동을 나타내는 메소드의 집합, 객체를 만들기 위한 메타정보라고 볼 수 있다.
인스턴스(객체)
클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 한다.
클래스를 통해 생성된 인스턴스들은 서로 다른 각자의 이름을 가지고 있고 속성과 기능을 독립적으로 갖는다.
2. 추상화 (자료의 추상화)
불필요한 정보는 놔두고 중요한 정보만을 표시함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것으로 클래스를 설계하는 것 자체를 의미한다. 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.
3. 캡슐화
기능과 특성의 모음을 "클래스"라는 "캡슐"에 분류해서 넣는 것이 캡슐화이다. (변수와 함수를 하나로 묶는 것을 뜻함)
객체가 외부에 노출하지 않아야 할 정보 또는 기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 할 수 있기에 코드의 수정이 일어났을 때 책임이 있는 객체만 수정하면 되기에 영향 범위를 예측하는데 수월해진다.
캡슐화의 목적
1. 코드를 재수정 없이 재활용하는 것
2. 접근 제어자를 통한 정보 은닉
4. 상속
상위 개념의 특징을 하위 개념이 물려받는 것
부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 하는 것이다.
*다중 상속은 불가능하다고 한다.
5. 다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
오버라이딩(Overriding), 오버로딩(Overloading)이 가능하다는 얘기이다.
오버라이딩(Overriding) : 부모 클래스의 메소드와 같은 이름, 매개변수를 재정의 하는 것
오버로딩(Overloading) : 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것
※getter, setter를 사용하는 이유
getter, setter를 사용하면 메소드를 통해 접근하기 때문에, 올바르지 않은 입력에 대해 사전에 처리할 수 있도록 제한하거나 조절할 수 있기 때문이다.
참고자료
https://jeong-pro.tistory.com/95
'Java > Java 공부' 카테고리의 다른 글
변수와 타입 (0) | 2023.08.29 |
---|---|
Java 언어 기초 (0) | 2023.08.28 |
자바란 (0) | 2021.03.31 |
[Java] 람다식, interface (0) | 2020.04.22 |
[Java] 객체 지향 프로그래밍 (0) | 2020.04.16 |