본문 바로가기
2023 활동 - 4학년/[1월 ~ 4월] sw 아카데미 백엔드 과정

[2023.01.10 / CNU SW 아카데미] 프로그래머스 캠퍼스

by 은행장 노씨 2023. 1. 10.

JAVA OOP 이야기

1. 객체지향 프로그래밍

- JAVA : 객체지향 언어다!

- 객체지향 프로그래밍 : 프로그램을 객체로 구성하는 것.

- 등장 : 프로그램이 거대화 하면서 등장.

- 아이디어 : 어떻게 큰 프로그램을 만들 것인가? 효율적인가?

  • 해결책 : 작게 나눠서 만들고 합쳐
  • 프로그램의 동작을 객체들에게 나눠서 수행. 
객체 (개념적인 용어)
기술적인 용어 : class, instance (헷갈리면 안된다.)
- 객체는 작은 기능을 수행한다. 
- 객체와 객체는 서로 협력을 한다. 
=> 일을 잘게 쪼개서 객체에게 위임하고, 서로 협력하게 만드는 것

- 객체를 서로 구분할 필요가 있다. 

  • type(형)으로 구분한다. 
  • 예시 : String str = "Hello World!";

- 타입 만들기 : class 만들기

import java.util.*;

class MyObject extends Object implements Runnable{
	// 필드 영역
    private int a = 0;
    // 메소드 영역
    public void run() {
    a += 1;
    }
}

 

2. 객체지향의 특성

특성은 크게 4가지의 특징이 있다. 

(2학년 때 객지설에서 중간고사 1번 문제로 객체지향의 특성을 적으라고 했던.. 기억이 났다....) 

  1. 캡슐화
    • 완성도가 있다. 
      => 객체는 기능을 수행하는 단위다. 스스로 완전함을 갖는다. 
    • 정보가 은닉되어 있다.
      => 객체의 정보가 밖으로 전달되거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다.
    • 객체는 스스로 동작할 수 있는 환경을 갖고 있어야 한다. 
      외부에 의존하거나, 외부의 침략을 제한하여야 한다.
  1.  
  2. 상속
    • 상위, 부모, super, 추상
    • 하위, 자식, this, 구체
    • 오해 : 공통된 기능을 여러 객체에게 전달하고 싶을 때, 상속을 쓴다.(x)
    • 포유류 > 사람 > 남자 > 짱구
  3. 추상화
    • 상속이랑 비슷하다. 위로 올라갈수록 추상화가 된다. 
      - 추상화된 객체 : 추상체
      - 구체적인 객체 : 구상체
      => 추상체와 구상체는 상대적인 개념이다.
      => 객체간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 된다. 
    • 의미적 추상체 
  4. 다형성
    • 같은 객체지만 누가 접근하느냐에 따라서 필터링된 기능만 제공
    • 객체와 객체가 겹치면 안된다. 

 

3. 객체지향 설계 : UML

(1) UML

- 객체지향 프로그래밍 : 기능을 객체에게 나눠서 수행시킨다. 

=> 객체를 어떻게 구분했다. (일을 어떻게 분할했다.)

=> 객체간의 관계가 어떻게 구성되었다. (연관관계가 어떠하다.)

 

- 설명하기 위한 도구 : UML (주소 : https://www.draw.io/)

  • Usecase Diagram
  • Sequence Diagram
  • Package Diagram
  • Class Diagram

 

(2) 어떻게 하면 객체지향을 잘 할 수 있을까?

- 객체지향 설계를 하는 5가지 원칙

  • S : SRP
    단위 책임의 원칙, 하나의 임무만 줘라. 
    수정이 필요할 경우 수정되는 이유는 하나 때문이어야 한다. 
  • O : OCP
    수정에는 닫히고, 확장에는 열어라. 
  • L : LSP
    추상 객체로 사용되는 부분에 구상 객체가 들어가도 아무 문제가 없어야 한다. 
  • I : ISP
    인터페이스 분류의 원칙, 인터페이스 나눠서 써라. 
  • D : DIP

- 디자인 패턴(GoF) - 23가지 패턴(주소 : https://refactoring.guru/)


객지설 좋아하는데 다시 배워서 너무 좋았다. 

디자인 패턴을 따로 정리해둬야겠다.