백엔드 수업 #06 클래스 - 01 객체 지향 프로그래밍

sookyoung.k·2022년 11월 14일
1
post-thumbnail

갑자기 CH06으로 순간이동~!

순서대로 쓰고 싶지만... 이런거 상당히 불편함. 그렇지만 클래스 공부가 시급한 것 같아서 먼저 공부한다. 머리론 이해하지만 불-편한 마음이 든다. 그래도 낼 수업 잘 따라가야지.

자스 포기한 샛기였는데 붙잡혀버렸거든요. 자바는... 포기하기 전에 공부하는 중인데... 삶이 쉽지 않네요.

객체 지향 프로그래밍

강사님께서 이런 말씀을 해주셨다. 개발자라는 직업은 화이트칼라 직업이긴 하지만, 사실 공장 노동자라고 생각하면 쉽다고... 공장에서 부품을 만들어서 부품을 조립하여 완성된 제품을 만드는 것을 프로그래밍이라고 생각해보라고 하셨다.

공장 자바 프로그래밍
부품 객체
부품 개발 객체 생성
부품 조립 객체 조립
완성된 제품 완성된 프로그램

부품이 객체에 해당하는 것이고, 부품을 조립해서 완제품을 만들듯이 객체를 만든 후 하나씩 조립해서 완성된 프로그램을 만드는 기법"객체 지향 프로그래밍"이라고 한다.

프로그래밍의 목적은? 객체란?

코딩을 공부하면서 '이걸 왜 하는거지?' 라는 생각을 진짜 많이 하는 것 같다. '왜'에 대한 의문을 찾아가면서 공부하는 것이 필요한 듯 하다. 왜를 모르니까 방향을 못 잡고 자스를... 놓게 되었는데... 말임... 다시 해야함.암튼.


프로그래밍은 실제 세계의 일을 모델링하여 프로그램으로 만드는 것이 목적이다.

현실 세계의 모든 것이 객체가 될 수 있는데 (예시: 사람, 자동차, 책 등) 각각의 객체는 고유한 특성과 고유한 행동을 가지고 있다. 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 객체라고 한다.

속성과 동작은 자바에서 각각 필드(field)와 메소드(method)라고 부른다.

ex.사람: 객체 / 사람의 특성(이름, 나이): 필드 / 사람의 행동(웃다, 먹다): 메소드


현실의 객체를 모델링하여 모델링하여 소프트웨어 객체로 설계하는 것, 즉 프로그램으로 만드는 것이 프로그래밍의 목적이라는 것이다. (객체를 기반으로 프로그래밍하기 때문에 객체지향프로그램이라고 함.)

객체의 상호작용

현실 세계의 모든 현상은 객체와 객체 간의 상호 작용으로 이루어진다!

예를 들어, 우리가 계산기의 기능을 이용하고, 결과를 리턴 받는 것은
객체가 메소드를 호출하여 결과를 리턴받는 것과 같다는 이야기다.

각각 독립적으로 존재하는 객체들은 다른 객체와 서로 상호작용을 하면서 동작하는데, 객체들 사이의 상호작용 수단이 바로 메소드이다.

Calculator.add(10, 20);
int result = 30; // 리턴한 값을 int 변수에 저장 

사람이라는 객체가 전자계산기라는 객체에게(객체 간 상호작용) 더하기(메소드 이름)라는 메소드를 호출! (Calculator.add())
10과 20은 메소드를 실행하기 위해 필요한 매개값!
30은 메소드 실행 후 메소드를 실행한 곳으로 돌려주는 리턴값!

cf. 절차지향프로그래밍 - 수행 작업을 순차적으로 표현한다.
객체지향프로그래밍 - 수행 작업을 객체들 간의 상호 작용으로 표현한다.

객체 간의 관계

여기 부터는 수업 때는 다루지 않았지만 (다뤘나?... 내가 기억하지 못하는 걸수도...) 교재에 있어서 간단하게 정리하고 갑니다.

  • 객체는 대부분 다른 객체와 관계를 맺고 있다.
  • 집합 관계, 사용 관계, 상속 관계

집합 관계

: 하나는 부품, 하나는 완성품에 해당 : 자동차는 엔진, 타이어, 핸들 등으로 구성. 자동차와 부품들의 관계 = 집합 관계

사용 관계

: 객체 간의 상호작용! 다른 객체의 메소드를 호출하여 원하는 결과를 얻어낸다. : 사람은 자동차를 사용하므로 사람과 자동차의 관계 = 사용 관계 (메소드: 달린다, 멈춘다 등)

상속 관계

: 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계 (일반적으로 상위 객체는 종류를 의미하고 하위 객체는 구체적 사물에 해당.) : 자동차는 기계의 종류임. 기계(상위)와 자동차(하위)의 관계 = 상속 관계

객체 지향 프로그래밍의 특징

  1. 캡슐화 - 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
    (외부 객체는 객체 내부의 구조를 알지 못하고 객체가 노출해서 제공하는 필드와 메소드만 이용 가능)
    -외부로부터 보호하기 위함

  2. 상속 - 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있게 해준다. 마치... 자식이 노력 없이 부모의 재산을 물려받는 것처럼... 하지만 난 물려받을 재산이 없을 것 같은데...
    -하위 객체를 빨리 설계할 수 있도록 도와주고 반복된 코드 중복을 줄여줌

  3. 다양성 - 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있음

profile
영차영차 😎

0개의 댓글