자바 이야기

객체지향 정리

김푸른초푸른 2020. 9. 27. 11:44

* 프로그래밍은 현실세계의 문제를 가져와서 해결하는 법이다

 

1. 객체들의 모임과 메시지를 주고 받음

 

1> 문제를 데이터 관점에서 본다

2> 데이터 상호관계를 정의하며 해결책을 찾아간다 

3> 채력, 공격력, 방어력 등 변수를 가진다 

4> 클래스를 만들어서 , 필드는 캐릭터 (변수) / 메서드 (함수)를 정의한다

5> 생성자클래스에 파라미터를 받아서 변수에 넣는다 

=> 파라미터를 받는 함수! (대신 필수값!)

 

[객체지향을 많이 쓰는 이유!]

1. 요구사항이 자주 변경되는 환경

=> 설계도가 자주 변경될 수 있다 (확장 및 추가, 변경에 용이)

 

2. 소프트웨어 공학 역사

1> 구조 기법 -> 정보공학 방법론 -> 객체지향 방법론 

2> 소프트웨어 공학의 목표는 원가절감이다! 

3> 원가절감에서 중요한건 재사용이고, 객체지향은 기존에 있는 정보를 재사용 가능 

(상속, 다형성, 추상화 등)

4> 객체지향은 1940~50년에 인공지능 분야에 최초 객체 개념을 사용

=> 객체와 속성 

 

3. 객체지향 방법론 40가지 등장 (크게 3가지 방법)

1) Booch의 객체지향 설계 방법론 (이론)

1> c++ 처럼 비순수 객체지향을 만들면서 발전

2> 상향식 접근 방법으로 메시지, 클래스를 통한 객체 생성 

3> 공학 설계방법론으로 친숙

 

2) Jacobson 사용자 시나리오 방법론 (설계 문서, 기본 설계도)

1> 유즈케이스(use case) 모델링 제안 

2> 비설계자가 봐도 이해하기 쉽게 시나리오와 유스케이스 중심으로 업무 협의 가능

3> 단계적 절차를 진행하면서 유스케이스에서 객체를 찾는다! 

 

3) Rum baugh 등, Coad & Yourdon, Martin & Odell 객체 클래스 중심

1> 객체 클래스 중심으로 분석기반 

2> 객체다이어그램(E-R 다이어그램의 확장된 형태)을 가장 핵심 도구로 사용

3> 1997년 UML(unified modeling language)이라는 객체지향 분석 및 설계를 위한 표준 방법론을 완성

 

UML 참고 : 유스케이스 명세서 작성

 

4. 소프트웨어 개발을 위한 모델링

1> 3가지 관점

1] 정적구조 (맴버변수) : 객체 정보 관점

-> 클래스 간에 어떤 관계인가? 

 

2] 동적관점 (메서드, 생성자) : 제어와 행위 

1) 데이터와 행위를 하나로 묶어 객체를 정의 

2) 객체를 추상화시키는 작업 : 이렇게 해야합니다 (약속!)

 

3] 기능관점 : 알고리즘 

 

=> 상향식 개발방법으로 개발 생각이 달라진다

 

 

5. 객체지향 분석 설계 (구현까지)

 

1) 업무 과정 이해 및 분석 

-> A to Z까지 

2) 시스템 설계 

1> 업무를 전산화할 수 있는 방법 고민 

2> 최적의 성능을 내고 적당한 자원 활용할 수 있는 비용까지 

 

3) 객체 설계 

1> 실제 구현하는데 필요한 세부 사항들을 추가

2> 각 객체 클래스의 속성과 연산에 필요한 자료구조와 알고리즘을 설계

- 자료구조 : 어떻게 데이터 가져올 것인지

- 알고리즘 : 업무 과정을 어떻게 코드화 

 

4) 구현

1> 객체 클래스의 세부사항들을 프로그램 언어 / DB / 하드웨어 등 실제로 구현! 

 

 

6. 객체지향 분석하는 법

1) 업무 지식 얻기

ex) 협의 미팅 / 업무 프로세스(엑셀 등 보고 자료) / 기존 시스템 기술서 (시스테 문서, 매뉴얼 등)

/ 관련 부서 문서 등 

 

2) 클래스 후보를 찾기! 

: 브레인 스토밍 등 클래스를 찾는 과정 (DB 아키텍처)

 

3) 클래스들 사이에 모델링 

=> 연관 , 종속 , 집합 , 일반화 

 

4) 객체들 사이의 협력과 행위 

: 다양한 다이어그램으로 설명! 

 

5) UML 등 사용자가 이해할 수 있는 설계 문서로 작성! 

 

UML 참고 : 유스케이스 명세서 작성 + 정처기 이야기 7. UML

 

[특징]

1. 상속성

: 개념의 구체적 확장

ex) 동물 -> 개 , 새 , 고양이 

 

1> 기존 클래스를 재활용 하는 목적!

2> extends를 사용하며 한개만 상속한다 (부모 클래스)

3> 부모 클래스가 가진 행동을 이어 받아 재정의하여 사용 가능하다 

4> 자신을 가리키는 것 this (클래스 내부에서 사용)

5> 부모를 가리키는 것 super 

=> 생성자 호출 / 변수 접근 /. 메서드 호출 

 

참고 : https://datasets.tistory.com/278

 

 

 

 

2. 다형성

: 행위의 구체적 행동

ex) 그림 그리기 -> 사각형 , 삼각형 그리기 

 

 

 

 

3. 캡슐화 (API)

= 메소드나 생성자의 내용을 몰라도 이름(양념장명), 파라미터(재료), 리턴값(결과물)만 알면 호출하여 사용가능함!

=> 클래스가 내부에 뭔진 잘 몰라도 가져와 사용가능

 

4, 은닉성 (getter, setter) - 보안성

= 외부 프로그램(클래스)으로부터 정보(속성값, 데이터)를 감추는 것 

-> 내부 정보를 감추는 것 

 

[객체지향 의미]

 

 

 

신성을 부여할 수 있는 구분

 

참고 : https://datasets.tistory.com/247

 

 

객체지향에서 실세계를 반영해야한다는 이유
컴퓨터처럼 사고하지 마라!!
객체지향 = 플라톤 이데아론에서 출발
영어에 관사가 붙는 이유 / 현실의 물건은 이상적인 세계있는 물건의 복제품!

 

이상적인 한 class를 만들고 특성들에 자기가 원하는 사과를 찍어만 내면 된다!

 

이상에 맞게 실존하는 세계에 찍어 내는게 핵심이다!

 

구체적인 숫자는 없고 속성이나 원본만 가지고 있다

 

독립적 / pk / 객체로 존재

 

 

 

new 생성자 사용이유

 

[생 성 자] 

1. new로 객체를 생성할 때 사용한다

(매개변수로 값을 받음)

 

 

2) 클래스 내 기본 생성자 호출 (생성시 필수!)

 

3) 오버로딩을 이용해서 생성자를 여러개 만들 수 있다 

+ 메서드도 같은 이름으로 여러개 만들 수 있다 

 

=> 이런 생성자를 여러개 만들 수 있다.

 

오버라이딩 참고 : https://datasets.tistory.com/278

 

 

참고 : [자바]객체지향언어란, 클래스란, 멤버변수vs지역변수 - 야망찬 개발자의 블로그 (sowon-dev.github.io)

참고2  : 객체지향 프로그래밍(OOP) - 클래스와 오브젝트 한방에 이해하기 - YouTube



'자바 이야기' 카테고리의 다른 글

자바 제어자  (0) 2020.11.10
변수 설정  (0) 2020.11.10
DB 연동방식  (0) 2020.07.30
자바 이야기 6. 메소드의 활용  (0) 2020.05.12
자바 이야기 4. 배럭만들기와 한 부대씩 움직이게 하기  (0) 2020.02.28