본문 바로가기
Skill Stacks/Java

7. Java 객체 지향 프로그래밍

by JayAlex07 2023. 5. 16.

7. Java 객체 지향 프로그래밍

 

 

절차적 프로그래밍

과정, 메서드, 함수 위주로 생각하는 프로그래밍이다


 

 

 

객체 지향 프로그래밍

객체, object가 어떤 데이터를 포함하는지, 어떤 행동을 할 수 있는 프로그래밍을 하는 것이다

  • 데이터는 바뀔 수 있다

 

 

Class

public class Planet {
    name, location, distanceFromSun; //data
    revolve(), rotate(); //actions/behaviors
};
  • 클래스는 탬플렛, 즉 객체를 만드는 틀이다
  • 클래스 안에, 만들어질 객체에 어떤 데이터를 넣을 수 있는지, 또는 어떤 행동을 할 수 있을지 설정을 한다

 

 

 

Object

public class Planet {
    name, location, distanceFromSun; //data
    revolve(), rotate(); //actions/behaviors
};

Planet earth = new Planet();
Planet venus = new Planet();
  • 객체, object는 클래스라는 틀로 만들어졌다
    • earthvenusPlanet 이라는 클래스, 즉 틀을 통해 만들어진 변수이다

 

 

 

Encapsulation

  • '캡슐화'는 변수와 함수를 클래스로 묶고, 외부에서 쉽게 접근 못 하도록 은닉하는 것이다
    • 즉 객체가 제공하는 필드와 메소드를 통해서만 내부 정보를 접근할 수 있다
  • 다른 객체를 통해, 현재 객체의 데이터가 바뀌는 것을 막아 줄 수 있다
  • 객체의 속성을 캡슐화를 하여 메서드를 통해서 변수의 데이터를 바꾸는 로직을 짤 수 있다
    • 예) 음수를 데이터에 넣기 싫으면, 메서드의 if문을 통해 로직을 짠다
    • 유저가 변수를 음수로 잘 못 저장했을 때, 로직 때문에, 데이터가 수정이 안 된다

public class MotorBike {

    // --------------- state -------------
    private int speed;

    // speed의 기본 설정
    MotorBike() {
        this(10)
    }

    MotorBike(int speed) {
        this.speed = speed;
    }



    // -------------------- behavior----------------------
    // 속도 초기 세팅하기
    public void changeSpeed(int speed) {
        if (speed >= 0) {
            this.speed = speed;
        } else {
            System.out.println("This Can not be a speed");
        }
    }

    // 속도 추가하기
    public void increaseSpeed(int speed) {
        if (speed >= 0) {
            changeSpeed(this.speed + speed);
        } else {
            System.out.println("You can only INCREASE speed");
        }
    }

    // 속도 줄이기
    public void decreaseSpeed(int speed) {
        if (speed >= 0) {
            changeSpeed(this.speed - speed);
        } else {
            System.out.println("Negative value can not be an input");
        }
    }

    // 현제 속도 반환하기
    public int getSpeed() {
        return this.speed;
    }
    public void start() {
        System.out.println("Start the Bike");
    }

    public void stop() {
        System.out.println("Stop the Bike");
    }
}
  • private int speed
    • 외부에서 speed라는 변수를 직접적으로 접근할 수 없다 (private을 사용)
  • void changeSpeed(int speed)
    • 이 함수를 통해 speed를 바꾼다
    • if 문을 사용하며, 음수는 speed가 될 수 없는 것을 설정한다
  • this.speed = speed;
    • this.speed 는 클래스 안에 만들어진 speed 속성
  • int getSpeed()
    • 속도를 반환해준다

메서드를 이용해서 클래스 안에 있는 speed라는 변수를 바꿔주고, 반환을 했다

 

 

 

추상화

  • 자동차를 운전하기 위해서는, 자동차 안에 모든 부품에 대해 알 필요가 없다
  • 이와 같이 프로그래밍도 디테일 적인 부분들은 모두 추상화가 되어 있다
    • 우리는 자바 코드를 작성한다
    • 코드를 작성하면, 코드가 컴파일 되어 ByteCode로 만들어 지고, JVM을 통해 각 운영체제에 맞춰 실행이 된다
    • 우리는 자바 코드를 작성하면 되지, 컴파일부터 JVM까지 할 필요가 없다 (모두 추상화가 되어 있다)
  • 즉 메서드를 이용할 때에, 메서드가 어떤 기능을 하는지만 알면 되고, 자세한 로직까지 알 필요 없이 사용이 가능하다
    • 로직은 추상화가 되어 있다

 

 

 

생성자

객체를 만들 때에, 속성의 값을 미리 설정을 해 놓는 것이다

'Skill Stacks > Java' 카테고리의 다른 글

9. Java 기본 데이터 타입 (Float, BigDecimal)  (0) 2023.05.16
8. Java 기본 데이터 타입 (Integer)  (0) 2023.05.16
6. Java Eclipse  (0) 2023.05.12
5. Java Platform (Complier, ByteCode, JVM)  (0) 2023.05.09
4. Java Method  (0) 2023.05.08