[자바 무료 강의] 자동차라는 객체 - 객체의 합성 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의자동차라는 객체 - 객체의 합성최종수정일 2021-11-21
아이콘약 6분

이번 강의는 자동차라는 현실세계의 객체를 프로그래밍의 세계로 구현해보고 객체의 합성에 대한 개념에 대해 배우는 시간입니다. 구조적인 프로그래밍과 다르게 객체들은 각 속성과 행위를 가지고 있으며 객체가 객체의 행위를 호출하는 흐름으로 진행됩니다. 계속해서 현실 세계에 있는 모든 것을 '쪼개고', '분리'하여 객체로 생각하는 습관을 가지도록 해야 합니다.

추가 노트

자동차와 관련된 소스코드는 실습도구에 있습니다.


1. 객체의 합성(has - a)


객체와 관련된 강의에서 객체는 속성과 행위를 가지고 있다고 했었는데요. 각 객체들은 독립적인 속성과 행위를 가지고 있는데 이러한 객체들이 모여 또 하나의 객체를 만들 수 있습니다. 이것을 객체를 합성한다고 부릅니다.

자동차 객체

class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name) {
        this.name = name;
        this.accelerator = new Accelerator(name);
        this.engine = new Engine(name);
        this.handle = new Handle();
        this.wheel = new Wheel("빠른 바퀴");
    }
}
Car car = new Car("이쁜 자동차");

자동차는 엔진, 액셀러레이터, 핸들, 바퀴를 가지고 있습니다. 이러한 것을 가지고 있다고 해서 has - a 관계라고 부릅니다. (Car has a Engine)

그리고 이러한 자동차 객체는 엔진, 액셀러레이터, 핸들, 바퀴 객체에 의존합니다. 부품들 중 하나라도 빠지게 되면 완전한 객체가 되지 못합니다. 비정상적인 자동차가 됩니다.

자동차의 부품들에 의존하는 방법은 꼭 한 가지만 있는 것은 아닙니다. 이미 우리가 배웠던 생성자를 통해 부품들을 강제적으로 가질 수 있도록 할 수 있지요.


자동차 객체

class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name, Accelerator accelerator, Engine engine, Handle handle, Wheel wheel) {
        this.name = name;
        this.accelerator = accelerator;
        this.engine = engine;
        this.handle = handle;
        this.wheel = wheel;
    }
}
Accelerator accelerator = new Accelerator("이쁜 자동차");
Engine engine = new Engine("이쁜 자동차");
Handle handle = new Handle();
Wheel wheel = new Wheel("빠른 바퀴");

Car car = new Car("이쁜 자동차", accelerator, engine, handle, wheel);

객체의 합성이라는 개념 자체가 어려운 것은 아니나 익숙하지 않을 뿐입니다. 이후의 강의에서 배우지만 객체의 합성은 현업에서 추상화와 함께 빈번하게 사용합니다.

도전자 질문
아이콘으르르릉(2022-08-12 18:45 작성됨)
강의를 보던 중 궁금한 사항이있어 글을쓰게되었습니다.
class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name) {
        this.name = name;
        this.accelerator = new Accelerator(name);
        this.engine = new Engine(name);
        this.handle = new Handle();
        this.wheel = new Wheel("빠른 바퀴");
    }
}
강의는 이런 식으로 Car 생성자가 실행되면서 각각의 인스턴스들이 실행되면서 name이 각각의 생성자에 참조되도록 실행되도록 한거같은데 
혹시 그러면 name참조 할 생각이 없고 각각의 값을 넣게 된다면 

String carName;
		Engine engine = new Engine("포르쉐");
		Accelerator accelerator = new Accelerator("오른쪽","왼쪽");
		Handle handle= new Handle();
		Wheel wheel= new Wheel("멋진");

이런식으로 인스턴스를 만들어도될까요??



아이콘루미자미바(2021-12-05 22:46 작성됨)
강의 1:49 부분에
void 가 붙은 메서드는 반환하지 않는다고 했던거 같은데
if문에 return이 들어가는 이유가 무엇인지 궁금합니다...
느낌은 뒷부분 진행하지 않고 if문 에서 메서드가 끝나는거 같은데 정확히는 모르겠습니다
아이콘코드라떼(2021-12-06 16:06 작성됨)
안녕하세요. 코드라떼입니다 :)

말씀하신대로 실행흐름에서 return 키워드를 만나면 메서드는 그 즉시 종료됩니다. return 값이 존재하는 메서드와 return 값이 존재하지 않는 메서드가 있는데 return 값이 존재하지 않는 메서드에서는 반환값 없이 return 키워드를 사용하여 메서드를 종료할 수 있습니다. 반환값이 존재하지 않는 메서드에서는 return 키워드는 필수가 아니며 상황에 따라 적절히 사용할 수 있습니다.

ps. 추가로 강의 1:49부분에서 return 키워드를 작성하지 않고도 if else를 이용해도 원하는 목적의 코드를 작성할 수 있습니다. return을 사용한 이유는  최대한 다양한 예시를 보여드리려고 return 키워드를 작성했습니다.


감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

소스 코드에 집중하기 보다는 객체와 객체 단위에 대한 것에 대해 좀 더 집중해보세요.

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의자동차라는 객체 - 객체의 합성최종수정일 2021-11-21
아이콘약 6분

이번 강의는 자동차라는 현실세계의 객체를 프로그래밍의 세계로 구현해보고 객체의 합성에 대한 개념에 대해 배우는 시간입니다. 구조적인 프로그래밍과 다르게 객체들은 각 속성과 행위를 가지고 있으며 객체가 객체의 행위를 호출하는 흐름으로 진행됩니다. 계속해서 현실 세계에 있는 모든 것을 '쪼개고', '분리'하여 객체로 생각하는 습관을 가지도록 해야 합니다.

추가 노트

자동차와 관련된 소스코드는 실습도구에 있습니다.


1. 객체의 합성(has - a)


객체와 관련된 강의에서 객체는 속성과 행위를 가지고 있다고 했었는데요. 각 객체들은 독립적인 속성과 행위를 가지고 있는데 이러한 객체들이 모여 또 하나의 객체를 만들 수 있습니다. 이것을 객체를 합성한다고 부릅니다.

자동차 객체

class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name) {
        this.name = name;
        this.accelerator = new Accelerator(name);
        this.engine = new Engine(name);
        this.handle = new Handle();
        this.wheel = new Wheel("빠른 바퀴");
    }
}
Car car = new Car("이쁜 자동차");

자동차는 엔진, 액셀러레이터, 핸들, 바퀴를 가지고 있습니다. 이러한 것을 가지고 있다고 해서 has - a 관계라고 부릅니다. (Car has a Engine)

그리고 이러한 자동차 객체는 엔진, 액셀러레이터, 핸들, 바퀴 객체에 의존합니다. 부품들 중 하나라도 빠지게 되면 완전한 객체가 되지 못합니다. 비정상적인 자동차가 됩니다.

자동차의 부품들에 의존하는 방법은 꼭 한 가지만 있는 것은 아닙니다. 이미 우리가 배웠던 생성자를 통해 부품들을 강제적으로 가질 수 있도록 할 수 있지요.


자동차 객체

class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name, Accelerator accelerator, Engine engine, Handle handle, Wheel wheel) {
        this.name = name;
        this.accelerator = accelerator;
        this.engine = engine;
        this.handle = handle;
        this.wheel = wheel;
    }
}
Accelerator accelerator = new Accelerator("이쁜 자동차");
Engine engine = new Engine("이쁜 자동차");
Handle handle = new Handle();
Wheel wheel = new Wheel("빠른 바퀴");

Car car = new Car("이쁜 자동차", accelerator, engine, handle, wheel);

객체의 합성이라는 개념 자체가 어려운 것은 아니나 익숙하지 않을 뿐입니다. 이후의 강의에서 배우지만 객체의 합성은 현업에서 추상화와 함께 빈번하게 사용합니다.

도전자 질문
아이콘으르르릉(2022-08-12 18:45 작성됨)
강의를 보던 중 궁금한 사항이있어 글을쓰게되었습니다.
class Car {

    String name;
    Accelerator accelerator;
    Engine engine;
    Handle handle;
    Wheel wheel;

    Car(String name) {
        this.name = name;
        this.accelerator = new Accelerator(name);
        this.engine = new Engine(name);
        this.handle = new Handle();
        this.wheel = new Wheel("빠른 바퀴");
    }
}
강의는 이런 식으로 Car 생성자가 실행되면서 각각의 인스턴스들이 실행되면서 name이 각각의 생성자에 참조되도록 실행되도록 한거같은데 
혹시 그러면 name참조 할 생각이 없고 각각의 값을 넣게 된다면 

String carName;
		Engine engine = new Engine("포르쉐");
		Accelerator accelerator = new Accelerator("오른쪽","왼쪽");
		Handle handle= new Handle();
		Wheel wheel= new Wheel("멋진");

이런식으로 인스턴스를 만들어도될까요??



아이콘루미자미바(2021-12-05 22:46 작성됨)
강의 1:49 부분에
void 가 붙은 메서드는 반환하지 않는다고 했던거 같은데
if문에 return이 들어가는 이유가 무엇인지 궁금합니다...
느낌은 뒷부분 진행하지 않고 if문 에서 메서드가 끝나는거 같은데 정확히는 모르겠습니다
아이콘코드라떼(2021-12-06 16:06 작성됨)
안녕하세요. 코드라떼입니다 :)

말씀하신대로 실행흐름에서 return 키워드를 만나면 메서드는 그 즉시 종료됩니다. return 값이 존재하는 메서드와 return 값이 존재하지 않는 메서드가 있는데 return 값이 존재하지 않는 메서드에서는 반환값 없이 return 키워드를 사용하여 메서드를 종료할 수 있습니다. 반환값이 존재하지 않는 메서드에서는 return 키워드는 필수가 아니며 상황에 따라 적절히 사용할 수 있습니다.

ps. 추가로 강의 1:49부분에서 return 키워드를 작성하지 않고도 if else를 이용해도 원하는 목적의 코드를 작성할 수 있습니다. return을 사용한 이유는  최대한 다양한 예시를 보여드리려고 return 키워드를 작성했습니다.


감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

소스 코드에 집중하기 보다는 객체와 객체 단위에 대한 것에 대해 좀 더 집중해보세요.

Output
root$