객체지향 프로그래밍 : 객체를 중심으로 하는 프로그래밍
객체를 프로그램을 구성하는 기본단위로 본다.


객체에게 함수는 어떤 존재인가요 ?
기능,서비스로서의 존재이다.
서비스를 구현할 때  함수의 원래 목적인 나누기, 집중화, 재사용

객체-역할자-기능/서비스

class 상점관리{
   private 점원 점원1;
   private  손님 손님1;

}

  • 구조적함수 : 데이터구조에 영향을 받는것모아둔것
  • 객체지향:객체의 행위를 모아둔것, 좀더 큰단위의 함수들
                 public 외부로노출해야할 객체행위
                 private 반복,중첩,내부적으로 쓸 구조적방식함수
                과거 구조적프로그래밍  + 함수를 묶는개념
                선택적으로 만든다.
                분석,기획-객체찾게되고  서비스를찾음-서비스를 구조화시킴-함수를 구현(절차작성)-API
  • 객체지향적 관점 :~를 담당하는 것으로 볼것. 역할자로보는것 : 캡슐화, 클래스,객체
  • Has A상속 : 다른객체를 가지고 자기를 구현

자바실습 정리: 

출력역할을 위한 캡슐을 만들자 ->lotto가 필요하다
그래서 lotto를 가지게된다
this가 lotto를 가진다. has a
생성은 외부에서, 또는 자기스스로 하는게있다, (composition, association)


 

 



포함관계: 부품관계 has관계
객체로 객체단위로 나누기,집중화,재사용가능
나누기 : has
집중화 : is a
재사용 둘 다 가능

 

[객체지향] 프로그래밍
:  프로그램 => 코딩(절차를 다루는 부분) 
+ (절차를 나누고 정리하는 부분) : 구조적인 방법 / 객체지향적인 방법
구조적인 방법과 객체지향 방법은 절차를 나누고 정리하는 방법에서 어떤 차이가 있는가

 

절차만드는것 : 배열까지 배운것들

절차를나누고, 정리하는것은 사용자에게 보이지않는 부분이다.


절차를 나누는 방법(함수를 나누는 기준은)에서의 차이는?
-구조적인 방법에서는
   크기나 중첩/복잡도 높아지는 부분에서 코드를 나누었다.
    (IBM에서는 3년차 코딩 경험을 50라인 정도 ...)
   재사용/반복(집중화)/난이도 높아/...

   내가 감당할 수 있는정도가 기준이었다->애매함

    코드를 잘게 쪼갠다. 복잡하면 나눈것

-객체지향 방법에서는
   객체가 서비스하는 단위(실세계에서 객체의 행위)가 추가됨. //함수를 나누는 방법이 늘어남

   고객이 주문한다 - 주문하는 행위를 서비스로 만듦.
   주문을 order() -> 100줄 .. 중첩/반복/난이도..

    구조적인방법에서달라진게아니라 얹어진 것. 더큰개념의의 함수

(함수를)정리하는 방법에서의 차이는?
-구조적인 방법에서는
  데이터구조가 사용되면 함수가 외부의 코드로부터 영향을 받는 이상현상이 발생한다.
  따라서 데이터 구조를 사용하는 함수들을 하나로 묶어야 하는 필요성이 생기는데...
  
-객체지향 방법에서는
  객체라는 실세계에 반영함으로써 캡슐화된 함수를 그 객체의 행위로 보는 방식으로
  정리를 하자.   

  잘게 쪼개는 볼룸/중첩을 없애는 함수들은? -> 마찬가지로 캡슐화가 되어 있어야 한다.
 


분석/기획 -> 객체/서비스->구조적으로->함수를 구현(절차)/코딩 : API == 플랫폼

                          방정리                          구동      

 

자바언어가 물리적으로 사용하는 장치는 ?

컴퓨터 
 -CPU : 프로그래밍 언어 : 연산자/제어구조
 -주기억장치 : 프로그래밍 언어 : 변수/배열

캡슐화/함수/구조화/          ->   컴파일러 -> 절차(API 플랫폼을 사용)

(컴파일러가 제공해주는기능)


 -입/출력 : API == 플랫폼 (API는 플랫폼을 사용하기위한 도구.언어에따라 달라진다)

 

플랫폼        : API (플랫폼을 직접쓰는게아니라 API이용한다.)
그래픽 카드 : Win32API/AWT/Direct/OpenGL (그래픽을 다뤘을때 사용한 플랫폼)
카카오 친구 : 카카오 API (데이터를 이용하는 플랫폼이 카카오)

 

자바에서 클래스의 용도

1. 데이터를 구조화하는 용도(방정리)

   (사원/학생/교사) ~의 이름, ~의 주소, 나이, 연락처

    사원(이름/나이/주소/..), 학생, 교사

    사원 hailey = new 사원();

    울타리(유형) 안의 속성을 묶음, 거시적으로 데이터관리

    

2. 캡슐화를 위한 용도

   서비스를 묶는 역할

   캡슐은 역할자고 그 역할자가 가지는 기능(서비스)에 초점을 맞추는 방식

   데이터 속성은 가리고, 기능만 노출, 캡슐을 역할자로 본다. 객체화

    


LottoConsole.print(lotto);

객체를 생성하지않음 함수위주 코드.

실존하는 객체를 만들지않았다 = 개체가 아니다.

LottoConsole은 print함수가 있는 위치정보. 함수지향

LottoConsole은 객체화되지않았다. 함수를 가지고있는 울타리일뿐이다.

 

매개변수로 lotto를 받고있다.

print()안의 lotto들도 Program클래스에서 인자로 받은 lotto이다. 

 

 

public static void print(Lotto lotto) 인스턴스메소드로 , 역할자개념

로또출력을 위한 객체를 만들자.

 

인스턴스메소드로 바꾸기

static 지우기, 매개변수 사라짐

static함수                                    /                                              인스턴스메소드

 

LottoConsole.print(lotto);

LottoConsole는 print함수의 위치정보만 나타낸다. print함수가 있는 울타리.개체가아니다.함수지향

함수만있고 역할자는 없음, lotto를 인자로 넘겨받아서 출력

 

LottoConsole console = new LottoConsole(lotto);

console.print();

lotto를 이용해서 출력을 담당하는 객체, 출력해주는 역할자(객체)를 만듦, 객체지향

역할로 바라보는것

 

new Lotto와 new LottoConsole의 차이 (두 개체의 차이) 

Lotto로또 번호를 관리하는 역할, 객체지향적으로 봐야함

LottoConsole 로또번호를 출력하는 역할 ~를 담당하는 것으로 볼것.

Lotto : 다른 객체를 가지고있지않고 스스로 gen(), sort()기능을 가진 캡슐, 로또번호를 관리하는 역할

LottoConsole : 로또번호를 출력하는 역할. Lotto를 부품으로 가지고있다. 다른객체를 재이용

                    Has a 상속, 다른객체를 부품으로 이용

                    lotto의 기능을 직접구현할 필요없이 물려받아서 구현한다.

 

멤버변수가아니라 상속이아님


상속

물려받다보다는 제공받다로 이해할것

능력,기능을 제공받다. 능력,기능을 가진 객체를 has한다

Composition has A 상속 : 일체형

생성될때 Lotto()같이만들어지고 , LottoConsole이 사라지면 Lotto()같이 사라진다.

생명주기가 일치한다.

일체형
일체형 Composition has A 상속

 


Association has A 상속 (분리형)

 

배터리를 꽂아서 쓰는것처럼, 이용할때만 사용

분리형 Association has A 상속

 


print()메소드의 매개변수로 Lotto lotto를 넣는다면 ?

private Lotto lotto 선언할 필요가 없어진다. this객체의 구성으로 넣어서 부품으로쓰려고한것

 

캡슐인 객체와 기본형데이터의 차이

캡슐은 다양한 서비스를 가지고있어서 this가 가지고있는 lotto의 gen()기능을 불러올 수있다.

 

+ Recent posts