[자바] 객체지향 프로그래밍

20210623_170717

프로그램은 절차가 전부다.

20210623_170904

절차적인 프로그래밍으로 다 만들 수 있지만 유지보수와 수정이 복잡해 지므로 구조적인 프로그래밍이 나왔고 거기에 더 해서 객체지향인 프로그래밍이 나오게 되었다.


기능을 위주 vs 데이터 위주로 묶기

20210623_171558

-> 데이터 위주로 묶어야 한다.

함수의 독립성이 깨진다.

함수는 외부에 수정을 받으면 안된다.

함수가 아무런 수정 안했는데 바뀌면 안되므로. 그걸 방지하기 위해서 매개변수까지 넣었는데 바뀌는 경우를 방지하기 위해서다.


코드 파일 관리 방법

왼쪽 클래스를 바꿨을 떄 오른쪽 에러나는 건 막을 수 없다.

20210623_171918

그럼 그 오류가 나는 걸 한곳에 모은다. 데이터 정의하는 곳에 안으로 들인다.

20210623_171929

하나 고쳤으면 에러가 나는게 다 왼쪽에 있기 때문에 에러가 왼쪽에 있음을 알고 고치면 된다.

20210623_172147

근데 캡슐화를 하면 데이터 구조에 따른 코드 수정 범위를 캡슐 범위로 한정 가능하다.

캡슐화 정리: 데이터 구조와 함수를 하나의 영역에 함께 정의하는 것.

인스턴스 메서드

20210624_000304

20210624_000603

이런식으로 리스트가 처리하고 사용 된다.

인스턴스 메서드 구현하기

객체지향적인 함수 호출로 변경하기

static은 고전적인 함. 모든 값은 파라미터로 넘겨받고 일반적인 함수랑 똑같이 사용.

인스턴스 함수는 반드시 객체 통해서 쓰고 묵시적으로 객체 넘겨받음.

static을 붙여서 정의하면 함수 뺴고 구현하면 인스턴스 메서드

똑같은 로직 같는데 파라미터 전달 받은게 없다. 그럼 어떻게 쓸수 있나?

인스턴스 메서드는 그래서 this라는 예약어를 사용한다.

20210624_002101

위 기존함수 인스턴스를 아래와 같이 만들고 싶은데 이 경우 this라는 키워드로 넘겨받고 static이라는 걸 빼버리면 아래와 같이 된다.

위에서 static, 파라미터 지우고 this로만으로 인스턴스 메서드를 사용하는 함수로 바꿨다.


캡슐의 은닉성과 접근 지정자

캡슐화 자체는 객체지향 지원 안하는 언어에서도 사용 가능.

캡슐을 꺠지 못하게 하는 도구 : 접근 제어자

20210624_032823


생성자: 초기화를 위한 특별한 함수

생성자의 조건
  1. 객체 생성되자 마자 무조건 제일 먼저 실행되어야 한다.

  2. 생성될 떄 단 한번만 실행되어야 한다.

20210624_090107


생성자 오버로드

생성자를 하나도 안 만들면 기본 생성자가 저절로 생성된다

20210624_092742

참조변수엔 null이 들어가고 값변수는 0이 들어간다.

20210624_092926

이걸 원치 않으면 생성자를 추가해서 원하는 값을 넣어줘야 한다.


캡슐을 꺠는 행위는 하지 않도록 해야 한다.

20210624_093212

Getter/Setter의 용도는?

  • 비효율적인거 같은데 public으로 하면 안되나?

속성명이 변경되는 게 아니라 데이터 구조가 변경되서 그렇다.

구조가 변경된다는 의미는?

구조가 변경되는 말의 의미는?

20210624_093539

20210624_093622


UI코드는 분리하는 게 기본

20210624_095250


HAS A 상속

일반적으로는 사용관계와 구성관계가 갖도록 이렇게 사용한다.

composition은 일체형이라고 생각하시면 될 것 같아요. 그 부품?에 해당하는 객체가 그것이 1:N 이든 1:1이든 그것을 소유한 객체와 동일한 시점에 생성되고 동일한 시점에 사라지는 관계를 composition 관계라고 합니다. 반면에 aggregation도 그것이 1:1이든 1:N이든 상관없지만 동일한 생명주기를 가지지 않는 것이 차이점 입니다. 일반적으로 콜렉션으로 수집되는 관계를 말하는 것으로 부품을 소유한 객체가 만들어져도 부품 객체는 없을 수 있으며 반대로 부품을 소유한 객체가 사라져도 부폼 객체는 별도로 생존할 수 있는 관계를 말합니다.


IS A 상속

90프로를 프레임 워크 가져다 쓰고 10프로만 내가 만든다.

20210624_132123


참조형식과 호출되는 메소드의 관계

Exam exam= new NewlecExam()은 되지만 아래는 절대 안된다

객체와 참조 형식의 개수

20210624_152748

20210624_153615

아래는 A범주에서 메서드 사용 가능하다

A라는 형식을 갖는 자료형식인데 B라고 하는 형식으로 확장하면 위와 같아진다 (형식변환)

이 경우 super로 f4 호출되고 그 다음 f5 호출하고 f2호출되고 f3호출됨.

20210624_154927

근데 중간에 오버라이드 된게 있으면 오른쪽이 호출된다.


메서드 동적 바인딩(함수 호출 위치 결정 방식 이해하기)

  • 메서드 오버라이드 하면 우선순위가 높아지는 구나 라고 알면 된다.

어떻게 객체가 다르다고 호출이 바뀔 수 있지?


호출 되는 함수 위치 결정 문제

20210624_160354

팩토리 메서드

  • 추상화 했다 = 공통 분모로 쓰겠다.





© 2021.03. by yacho

Powered by github