본문 바로가기

Java

[Chapter07-1] 객체지향 프로그래밍1

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