01. 객체지향 프로그래밍
- 객체지향 프로그래밍이란?
- 컴퓨터 프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악
- 현대 프로그래밍 패러다임의 하나
- 객체지향 프로그래밍의 특징
- 객체는 데이터 + 메서드(데이터를 처리할 수 있음)로 구성
- 소프트웨어의 부품화, 재사용을 주요 목표로 함
- 코드의 재사용성이 높다
- 코드의 관리가 쉬움: 개발과 유지보수에 강점, 직관적 코드 분석 가능
- 신뢰도 높은 프로그램 개발을 가능하게 함
- 타입
(1) (기본타입)
- 최소데이터
-오로지 데이터만
(2) (참조타입): 객체
- 데이터 복수개
- 데이터 + 기능함수(메서드)
- 객체의 구성
-객체이름
-데이터들
-기능함수
02. 객체의 정의
- 객체의 정의
- 실세계의 존재하는 것, 사물 또는 개념
- 객쳉는 정보의 효율적으로 관리하기 위해 의미를 부여하고 분류하는 논리적 단위(부품)
- 다른 객체와 서로 상호작용하며 동작
- 객체의 구성요소
- 객체는 속성(filed) + 동작(method)로 정의
- 클래스
- 객체를 정의해 놓은 것
- 객체를 만들기 위한 설계도
ex) 붕어빵에서 붕어빵 틀(클래스), 붕어빵(객체)
03. 인스턴스
- 인스턴스란?
- 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다
- 클래스(설계도) --> (인스턴스화) --> 인스턴스 (힙메모리에 사용할 수 있는 사용가능 상태)
- 객체지향의 네가지 특성
- 상속성(Inheritance) : 잘 만들어진 클래스의 필드, 메서드를 그대로 물려받음
- 캡슐화(Encapsulation) : 정보은닉, 필드 보호를 위함
- 다형성(Polymorphism) : 클래스 or 메서드를 다양한 방식으로 접근해서 사용할 수 있는 방식
- 추상화(Abstraction) : 내부구조와 상관없이 추상적으로 둘러쌈
(1) 상속(Inheritance) (확장 extends)
- 이미 만든 객체와 비슷하지만 필드와 메서드가 약간 차이가 나는 객체를 생성
- 기존의 클래스에서 공통된 필드와 메서드를 상속(재사용)
- 더 필요한 필드와 메서드를 추가
- 코드를 간결하게 하고 코드의 재사용을 높임
(2) 캡슐화
- 객체의 실제 구현된 내용을 감추고 접근 방법만 노출하는 것
- 외부객체(객체를 사용하는 쪽)에서는 객체의 내부 구조를 알지 못하며
객체가 노출하여 제공하는 필드와 메서드만 이용할 수 있음
- 객체 작성시 개발자는 숨겨야 하는 필드와 메서드, 공개하는 필드와 메서드를 구분하여 작성한다
- 캡슐화하는 이유는 외부의 잘못된 사용으로 객체가 손상되는 것을 피하기 위함 (정보은닉)
- 접근 제한자를 사용하여 객체의 필드와 메서드의 사용 범위를 제한한다
(3) 다형성
- 하나의 메서드나 클래스를 다양한 구현으로 사용가능하게 하는 개념
- 오버로드(Overload)와 오버라이드(Override)를 통해 다형성을 구현
* 오버로드
: 같은 이름의 메서드를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 된다
int add(int a, int b){
return a + b;
}
int add(int a, int b, int c){
return a + b + c;
}
//add라는 메서드를 가지고 두개의 정수 or 세개의 정수를 합산하는 같은 이름의 함수를 만들어 낼 수 있다
* 오버라이드
: 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 상속하여 사용할 수 있다. 또한, 하위 클래스에서 메서드를 재정의해서 사용할 수 있다.
class Car{ //부모클래스
public String Engine;
public int handle;
}
class Sonata extends Car{ //Car 클래스(부모클래스)를 상속받음 :
String accel;
}
public class OverTest {
public static void main(String[] args) {
//Sonata 객체 생성
Sonata car1 = new Sonata();
//변수 설정
car1.Engine = "CDi";
car1.handle = 1;
car1.accel = "super accel";
}
(4) 추상화(일반화)
- 공통적인 특징(속성)을 묶어 클래스를 정의하는 것
- 즉, 모델화 하는 것으로 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념
- 구체적인 특징을 감추고 전체적인 특징을 드러내는 것
- 코드를 간결하게 하고 코드의 재사용성을 높이기 위해 추상화를 사용
ex) Employee와 Student의 공통된 특징인 name, age, gender..등등을 묶어 Person클래스를 만드는 행위
'Java' 카테고리의 다른 글
[Chapter01]자바 언어 소개 (0) | 2021.12.08 |
---|---|
[Chapter07-2] 객체지향 프로그래밍1 (0) | 2021.12.07 |
[Session] 세션 시간 및 연장 설정 (0) | 2021.05.12 |
[간단한 for문] list (0) | 2021.04.30 |
[jdbc] 게시판 만들기 (VO, DAO, Main) (0) | 2021.04.29 |