TIL - 5/26

choichoichoi·2023년 5월 29일
0

내일배움캠프

목록 보기
10/36

내일배움캠프 2주 5일차

객체란?

  • 세상에 존재하는 물체라는 뜻. 식별이 가능함.

  • 물리적으로 존재하는 자동차, 계산기, 도서관등 과
    개념적으로 식별이 가능한 강의, 운동, 배달 주문 등이 있음.

  • 속성(특징)과 행위(행동)를(로) 가지고(구성) 있는데
    이때 속성 = 필드, 행위 = 메서드 라고 생각하면 된다.
    객체가 자동차라고 생각했을 때 자동차의 회사, 모델, 색상, 가격을 속성, 즉 필드이고 자동차의 기어변속, 라이트, 가속, 경적등이 행위, 메서드라고 한다.

  • 현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것을 '객체 모델링'이라고 함.

객체간의 협력

  • 현실에서 사람이라는 객체와 자동차라는 객체는 서로 행동(행위)를 통해 상호작용을 하며 협력할 수 있음.

  • 사람이 자동차 가속 페달을 밟으면 자동차는 그에 따라 속도를 올리며 앞으로 이동한다.

  • 사람이 자동차 브레이크 페달을 밟으면 자동차는 그에 따라 속도를 줄이고 정지한다.
    -> 소프트 웨어에서는
    사람 객체가 자동차 객체가 가지고 있는 가속 페달이라는 메서드gasPedal();를 호출한다. 그러면 자동차 객체가 반응해 속도 속성의 값을 증가시킨다.
    사람 객체가 자동차 객체가 가지고 있는 브레이크 페달이라는 메서드 breakPedal();을 호출하면 자동차 객체가 이에 반응해 속도 속성 값을 감소시킨다.

  • 또 소프트웨어의 객체들은 메서드를 통해 데이터를 주고 받을 수 있다.
    사람 객체가 자동차 객체한테 gasPedal();이라고 메서드를 호출할 때 매개변수로 어떤 값(입력값)을 같이 넣어서 호출.(그 매개변수를 넘겨줄 때는 항상 그 값은 자동차 객체에서 정의한대로 넘겨주게됨) 그러면 자동차 개 체는 그 값이 명세서대로 올바르게 들어왔는지 확인을 하고 맞으면 그 입력값대로 결과물(출력값)을 반환하는데 그의 값을 '리턴값'이라 함.

객체 관의 관계

  • 현실세계에서 사람과 자동차처럼 수 많은 관계를 맺고 살아가고 있음. 그런 것처럼 소프트웨어에서도 여러가지 관계가 있다.
    사람 객체가 자동차 객체를 사용하는 '사용 관계',
    자동차와 타이어, 자동차와 문, 자동차와 핸들처럼 자동차에 포함되어있는 '포함 관계',
    같은 공장에서 같은 기계시스템으로 생산되는 자동차와 기차가 있다는 가정하에 자동차와 기차는 기계시스템 객체를 상속 받는 '상속 관계'가 있다.

객체지향 프로그램(OOP)이란?

  • 코드를 작성하는 방법, 코드를 정리하는 방법임
  • 데이터에 대한 생각과 구조 방식이라고 볼 수 있음.
  • 객체 지향을 사용하는 언어와 사용하지 않는 언어가 있는데 사용하지 않는 언어에서 조차 객체 지향 언어 방식을 지원 할 만큼 배워두면 다양한 언어에 적용할 수 있음
  • 캡슐화, 상속, 다형성, 추상화가 있음.
  • 캡슐화는 필드(속성)와 메서드(행위)를 하나로 묶어서 객체를 만든(encapsulation) 후 실제 내부 구현내용은 외부에서 알 수 없게 감추는 것을 의미. 외부 객체에서 캡슐화된 내부의 구조를 알 수 없기 때문에 접근할 수 없어 보안에 좋고, 외부 객체에서 해당 필드와 메서드를 잘못 사용하는 경우가 없어져 객체가 변하지도 않음. 또한 불필요한 것을 굳이 외부로 노출시키지 않아서 혼란을 줄이는 역활을 함.
    자바에서는 캡슐화된 객체의 필드와 메서드를 노출 시킬지, 감출 지 결정하기 위해 접근 제어자(public, private, default등 여러가지)를 사용.
  • 상속은 부모 객체와 자식 객체가 있음. 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있도록 만들 수 있음. 자식 객체는 그것을 그대로 쓸 것인지, 안쓸 것인지 결정(overriding)해서 내려받음.
    객체가 상속 관계로 묶여있으면 객체 간의 구조를 파악하기 쉬워짐.
    필드와 메서드를 변경하는 경우 부모 객체에서 수정하면 자식 객체에게 전부 반영되기 때문에 일괄성 유지에 좋음.
    상속받아 사용할 수 있어 코드의 중복이 줄어듬.
  • 다형성은 여러가지 형태가 있음.
    예로 들어 Car 클래스를 토대로 2개의 자동차 객체를 만들때 자동차1 객체와 자동차2 객체의 경적 소리가 다르다면 '경적을 울리다.'라는 행위,horn();메서드의 구현을 다르게 재정의하여 사용할 수 있음.
  • 추상화는 구체적인 것들을 추상적으로, 모호하게 빼는것.
    객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는것. 공통적이고 중요한 것들을 모아 모델링을 함. 예로 여러 종류의 자동차들이 공통적으로 가지고 있는 가속, 브레이크, 속도와 같은 것들을 모아 자동차라는 객체를 모델링 할 수 있음.

객체와 클래스

  • 객체를 생성하기 위해 설계도(클래스)가 필요함.
    객체는 실체, 클래스(설계도)는 실체가 아님.
    클래스를 토대로 생성된 객체를 해당 클래스의 '인스턴스'(new키워드 사용)라고 부르고 이 과정을 '인스턴스화'라고 부름. 동일한 클래스로 여러개의 인스턴스를 만들 수 있음.
    Class 클래스_이름 = 객체를 만들기 위한 설계도

0개의 댓글