[Java] 객체 지향 프로그래밍과 클래스 (1)

김민범·2024년 10월 10일

Java

목록 보기
5/8

객체란?

  • 자바 언어 설명서 (The java Language Specification)에는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있다.
  • 컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미한다.
  • 객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인스턴스라고 지칭한다.

객체지향 프로그래밍이란?

  • 객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미한다.
  • 객체 지향적 설계를 통해서 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다.
  • 각각의 부품들이 각자의 독립적인 역할을 가지기 때문에 코드의 변경을 최소화하고 유지보수를 하는 데 유리하다.

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

  • 추상화
    • 객체의 공통적인 속성과 기능을 추출하여 정의하는것
    • 자바에서 추상화를 구현할 수 있는 문법 요소로는 추상 클래스(abstract class)인터페이스(interface)가 있음
  • 상속
    • 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
    • 클래스 간 공유될 수 있는 속성과 기능들을 상위 클래스로 추상화 시켜 해당 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 한다.
    • 클래스들 간 공유하는 속성과 기능들을 반복적으로 정의할 필요 없이 딱 한 번만 정의해두고 간편하게 재사용할 수 있어 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용할 수 있도록 한다.
  • 다형성
    • 다형성이란 이름 그대로 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.
    • 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할수 있는 객체 지향의 특성을 의미
    • 메서드 오버라이딩메서드 오버로딩(method overloading)이 있다.
  • 캡슐화
    • 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것
    • 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
    • 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출
    • 외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한부분만 외부로 노출될 수 있도록 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적

클래스

클래스를 만들기 위해 4단계가 필요하다

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


위와 같은 자동차 클래스를 만들어 보자.

  1. 클래스 선언

    public class Car() {}

    공개된(public) Car 클래스를 선언

  2. 클래스 필드 정의

    String company; // 자동차 회사
    String model; // 자동차 모델
    String color; // 자동차 색상
    double price; // 자동차 가격
    double speed;  // 자동차 속도 , km/h
    char gear; // 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    필드는 객체의 속성으로 데이터를 저장

  3. 클래스 생성자 정의

    public class Car() {
    	String company;
        .
        .
        .
        boolean lights;
        
        public Car() {}
    }

    자동차 객체의 생성 방식을 선언
    생성자는 반환 타입이 없고 클래스의 이름과 동일
    ()가 비어있는 생성자 => 기본 생성자(생략가능)

  4. 클래스 메서드 정의

    public class Car() {
    	String company;
        .
        .
        .
        boolean lights;
        
        public Car() {}
        
        public gasPedal(double kmh) {
        	speed = kmh;
            return speed;
        }
    }

    반환타입이 doublegasPedal메서드 선언

객체 생성

new 키워드를 사용해 클래스로부터 객체를 생성할 수 있다.

Car car = new Car();

Car클래스의 객체인 car 인스턴스 생성

Car car = new Car();
car.gasPedal(100);

참조변수 car를 이용해 객체 내부의 메서드에 접근해 실행 할 수 있다.

객체의 정의, 객체지향 프로그래밍, 클래스의 선언과 필드, 메서드 사용을 정리했다. 다음 글로 this, super, 상속, 추상클래스, 인터페이스를 알아보자

0개의 댓글