객체지향 프로그래밍 : 객체를 중심으로 하는 프로그래밍
객체를 프로그램을 구성하는 기본단위로 본다.
객체에게 함수는 어떤 존재인가요 ?
기능,서비스로서의 존재이다.
서비스를 구현할 때 함수의 원래 목적인 나누기, 집중화, 재사용
객체-역할자-기능/서비스
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함수가 있는 위치정보. 함수지향
print()안의 lotto들도 Program클래스에서 인자로 받은 lotto이다.
public static void print(Lotto lotto) 인스턴스메소드로 , 역할자개념
로또출력을 위한 객체를 만들자.
인스턴스메소드로 바꾸기
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()같이 사라진다.
생명주기가 일치한다.
Association has A 상속 (분리형)
배터리를 꽂아서 쓰는것처럼, 이용할때만 사용
print()메소드의 매개변수로 Lotto lotto를 넣는다면 ?
private Lotto lotto 선언할 필요가 없어진다. this객체의 구성으로 넣어서 부품으로쓰려고한것
캡슐인 객체와 기본형데이터의 차이
캡슐은 다양한 서비스를 가지고있어서 this가 가지고있는 lotto의 gen()기능을 불러올 수있다.
'2021 Newlecture > JAVA' 카테고리의 다른 글
추상화 / abstract class/ abstract method (0) | 2021.04.05 |
---|---|
Is a , has a 상속 정리 / 함수 호출 관계/ 동적바인딩 / 부모형식의 참조변수 (0) | 2021.04.02 |
오버로드/매개변수 있는 생성자/super(int value)/ Frame클래스 상속 후 오버라이딩 (0) | 2021.04.01 |
Is a 상속관계 / Override / super() (0) | 2021.03.31 |
프로그램을 만드는 순서 /개체와 서비스함수 / 객체지향에서의 캡슐화 (0) | 2021.03.29 |
객체지향 프로그래밍 / this / static메소드 / 인스턴스메소드/ 생성자 / Getter&Setter (0) | 2021.03.27 |
캡슐화 / 접근지시자 / Getter 함수 (0) | 2021.03.25 |
jar파일 생성/ 외부 jar파일 추가하기 (0) | 2021.03.24 |