상세 컨텐츠

본문 제목

[TIL#11-1] Java를 자바랑 part.5 <객체 지향 프로그래밍이란?>

내배캠/Chapter2

by DK9 2023. 10. 19. 09:58

본문

 

<어제 검색해서 찾은 것들>

 : 없을 무

 

<데일리 루틴>

내배캠 공부

밥 잘 먹기

운동 (사유 : 아직 안 나은 감기)

 

 

Java는 객체지향 언어이다.

 

1. 객체란?

 : 식별 가능한 모든 것. 자동차, 도서관, 강의 배달 주문, 운동 등.

 : 객체는 속성(=특징)과 행위(=행동)로 구성되어있다. 이 속성과 행위를 필드와 메서드로 구현할 수 있다.

 : 객체 간의 협력. 상호작용

 

 1) 객체 간의 협력, 상호작용

 : 사람이 가속 페달을 밟으면 자동차는 반응하여 속도를 올리며 앞으로 이동.

 : 사람이 브레이크를 밟으면 자동차는 반응하여 속도를 줄이며 정지

 : 사람 객체는 자동차가 가진 가속페달이라는 메서드 호출 >> 자동차 객체는 이에 반응, 속도 속성 값을 증가

 : 사람 객체는 자동차 객체가 가진 브레이크 페달 메서드 호출 >> 자동차 객체는 이에 반응, 속도 속성 값을 감소

 : 메서드를 통해 데이터를 주고 받을 수 있다.

 

 2) 객체 간의 관계

 

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

 

   (1) 캡슐화

 : 속성(필드)과 행위(메서드)를 하나로 묶어 객체로 만든 후 내부 구현 내용을 외부에서 알 수 없게 감추는 것.

 : 외부 객체에서는 캡슐이 노출시켜 준 필드 혹은 메서드를 통해서 접근 가능 = 보안이 좋다 = 객체가 변화하지 않는다.

 : 캡슐화 된 객체의 노출 정도는 접근 제어자(=Java의 public, private 등)를 통해 사용한다.

 

   (2) 상속

 : 객체지향 프로그래밍에는 부모 객체와 자식 객체가 존재.

 : 부모 객체는 보유한 필드와 메서드를 자식 객체가 사용할 수 있도록 만들 수 있다. 바로 위의 상속관계를 참고. 후에 overriding으로 이어진다.

 : 상속 관계로 묶으면 각 객체들의 구조를 파악하기 쉬워진다.

 : 부모의 내용을 수정하면 자식에게 전부 반영되기에 일관성을 유지하기 좋다. 코드 재사용성이 증가한다.

 

   (3) 다형성

 : 객체가 가진 고유한 특성에 따라 해당 객체를 다른 여러가지 형태로 재구성하는 것을 의미

 

   (4) 추상화

 : 객체에서 공통된 부분들을 모아 상위 개념으로 선언. 코딩에서는 매우 좋은 것.

 

   (5) 객체와 클래스

 : 객체를 생성하기 위해서는 설계도가 필요.

 : 객체를 만들기 위해서는 설계도에 해당하는 클래스가 필요하다.

 : 이때 클래스를 토대로 생성된 객체를 '인스턴스'라 하고, 이 과정을 '인스턴스화'라고 한다.

 : 동일한 클래스로 여러 개의 인스턴스를 만들 수 있다.

 : 객체와 인스턴스는 거의 비슷한 표현이지만 자세히 구분하면 다르다.

 : 자동차 클래스를 통해 만들어진 A자동차를 인스턴스라 칭하고 이런 인스턴스를 모두 자동차 객체라고 표현한다.

 : 즉, '접근제어자 static등등 class 클래스명' 은 객체를 만들기 위한 설계도이다.

 

 

이걸 토대로 클래스를 만드려고 한다.

클래스를 만들기 위한 4가지

1. 만들려고 하는 설계도를 선언한다.(클래스 선언)

 새로운 Java클래스를 만든다, main을 사용하지 않는다.


2. 객체가 가지고 있어야할 속성(필드)을 정의한다.

 (1) 필드 : 객체의 속성으로 데이터를 저장하는 역할. 좌측 그림에서 Car 하위(상단 2번째 칸에 있는 것들)에 있는 company: String....들이다.


3. 객체를 생성하는 방식을 정의한다,(생성자 = Constructor)

 : 어떠한 논리, 로직을 사용할지, 어떤 값이 필수로 필요한지 정의. 생성자는 반환 타입이 없고 클래스 이름과 동일. ()안이 공란인 생성자를 '기본 생성자(생략 가능)'라고 한다.(상단 3번째 칸에 있는 Car( ))


4. 객체가 가지고 있어야할 행위(메서드)를 정의한다.

 : Car() 하위에 있는 것들(최하단 칸).

 

 

아래는 코드 전문이다.

//클래스를 만들기 위한 4가지
//1. 만들려고 하는 설계도를 선언한다.(클래스 선언)
//2. 객체가 가지고 있어야할 속성(필드)을 정의한다.
//3. 객체를 생성하는 방식을 정의한다,(생성자)
//4. 객체가 가지고 있어야할 행위(메서드)를 정의한다.

public class PracClassBuild {
    //-----------------필드 영역----------------------------
    String company; //자동차 회사
    String model; // 자동차 모델
    String color; // 자동차 색상
    double price; // 자동차 가격
    double speed; // 자동차 속도, km/h
    char gear; // 기어상태(P, R, N, D
    boolean lights; // 자동차 조명,

// 생성자 : 처음 객체가 생성될 때(=인스턴스화 될 때) 어떤 로직을 수행해야하며,
// 			어떤 값이 필수로 들어와야하는지 정의
    //------------------------생성자 영역-------------------------
    public PracClassBuild() {
    }

    //-----------------------------메서드 영역---------------------------
//    gasPedal
//      input : Km/h
//      output : speed
    double gasPedal(double kmh) {
        speed = kmh;
        return speed;
    }

    //    breakePedal
//      input : X
//      output : speed
    double breakPedal() {
        speed = 0;
        return speed;
    }

    //    ChangeGear
//      input : gear char type
//      output : gear
    char ChangeGear(char type) {
        gear = type;
        return gear;
    }

    //    onOffLight
//      input : X
//      output : light boolean
    boolean onOffLight() {
        lights = !lights;
        return lights;
    }

    //    horn
//      input : X
//      output : X
    void horn() {
        System.out.println("빵빵!");
    }
}

메서드 작성 부분에서 순서대로

output(=return)으로 나오는 데이터 타입(=return 타입) : double

메서드 이름 : gasPedal

 

input, 받아야할 값 : (double형태의 kmh), 만약 없다면 공란으로.

 

수행할 로직(=output) : speed = kmh;(=kmh를 speed에 대입),

return speed;(gasPedal에 speed를 반환)

 

 

특이점으로 input과 output이 없다면 return이 없기에 void로 메서드를 만든다.(output이 없다면 void인 것 같지만 설명을 저렇게 했으니 일단은 이렇게 알자)

메서드에서의 speed, gear, lights 등과 같은 것들은 클래스 내부의 필드영역에서 가져온 것이다.

관련글 더보기