Java Spring

6. 객체 지향 프로그래밍

pearl.k 2023. 3. 27. 17:07

1. 객체 지향 프로그래밍이란?

  • 더 나은 프로그램을 만들기 위해 로직을 객체 중심으로 짜는 것
  • 객체 : 상태(state) / 행위(behave) 로 이루어진 하나의 물건이라고 볼 수 있다. 객체라는 한국어 단어가 와닿지 않을 때는 just Object 라고 받아들이자. 사실은 편하고 쉬운 개념이다.
  • 여러 가지 객체들을 조립하여 하나의 프로그램으로 만드는 것을 객체 지향 프로그래밍이라고 한다.

 

2. 설계와 추상화

  • 설계 : 좋은 객체를 만들기 위해 설계가 꼭 필요하다. 설계를 잘할수록 더 나은 프로그램을 만들 수 있다.
  • 현실의 복잡함 속에서 필요한 부분, 관점만 찾아내고 쉽게 바꾼다면 더 효율적일 것이다.
  • 위와 같은 행위를 추상화라고 한다.
  • 객체 지향 프로그래밍은 현실의 객체 (Object) 를 프로그래밍에 잘 반영하기 위한 노력의 결과이므로, 객체에서 필요한 관점만 추출하여 추상화하고, 이를 좋은 코드로 구현할 수 있는 능력이 뒷받침 되어야 한다.

 

3. 부품화

  • 하나의 단일화 된 물품을 기능별로 구분하여 분리 하는 것을 부품화라고 한다.
  • ex. 예전에는 일체형이었던 큰 컴퓨터를 기능에 맞게 각 부품으로 분리했다. (모니터, 키보드, 스피커, 마우스 등)
  • 문제가 생겼을 때, 어디에서 생긴 문제인지 빠르게 파악 가능하고, 문제 해결도 쉽다. (단일화 물건에 비해 더 빠름)
  • 분리하는 기준은 '추상화'를 통해 세운다.
  • 은닉화 / 캡슐화 : 내부의 동작 방법은 숨기고, 사용자에게 그 부품의 사용 방법만 노출 시키는 것

 

4. 객체화

  • 반복되는 작업이 있을 때, 객체로 만들어서 관리하면 편리하다.
  • 아래 코드에서는 반복되는 작업을 class Calculator로 묶어서 객체화했다.
class Calculator{
    int left, right;

    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }

    public void sum(){
        System.out.println(this.left+this.right);
    }

    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
}

class Main {

    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();

        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();
        c2.avg();
    }
}

이렇게 클래스를 선언하면, 클래스를 실제로 사용해야 한다. 클래스가 객체 "설계도" 라면, 인스턴스는 설계도를 보고 만든 일종의 "제품 (Object)" 이다. 여기서 c1, c2의 데이터 타입은 Calculator 이다. 사용자 정의 데이터 타입이라고 생각하면 된다.

  • 객체의 멤버 : 변수 & 메소드 (Class, Instance 각각 변수, 메소드 가짐)
  • 객체의 변수 : 상태 state
  • 객체의 메소드 : 행동 behave

 

5. 유효 범위

  • 클래스 아래에서 선언된 변수는 클래스 전역에 영향을 미친다.
  • 하지만 메소드 내에서 선언된 변수는 클래스 아래에서 선언된 변수보다 우선순위가 높다.
  • 지역적인 것이 전역적인 것 보다 우선순위가 높다. (전역적으로 기본 값을 설정하고, 필요에 따라서 지역 값을 다르게 사용하는 것이 더 효율적이다!!)
  • 전역변수 : 클래스 전역에서 접근할 수 있는 변수
  • 지역변수 : 메소드 내에서만 접근이 가능한 변수
  • 인스턴스의 유효 범위 : 메소드 안에서 인스턴스 변수에 접근하려면 this 를 사용하자.
class C3 {
    int v = 10;

    void m() {
        int v = 20;
        System.out.println(this.v);
    }
}

class Main {

    public static void main(String[] args) {
        C3 c1 = new C3();
        c1.m();
    }
}

'Java Spring' 카테고리의 다른 글

8. Overriding & Overloading  (0) 2023.04.03
7. 상속과 생성자  (0) 2023.04.03
5. 메소드, 입출력  (0) 2023.03.27
4. 반복문, 배열  (0) 2023.03.26
3. 비교, 조건문, 연산자  (0) 2023.03.26