개발 문서/Java

객체지향 프로그래밍과 자바

copg 2023. 11. 11. 02:45
728x90
반응형

자바(Java)는 객체지향 프로그래밍(OOP) 언어로, 객체지향 프로그래밍의 원칙과 개념을 기반으로 설계되었습니다. 여기서 객체지향 프로그래밍에 대한 기본 개념과 자바에서의 구현에 대해 살펴보겠습니다.

객체지향 프로그래밍 (OOP) 개념:

  1. 클래스와 객체:

    • 클래스(Class): 객체를 생성하기 위한 설계도 또는 틀. 데이터와 메서드로 구성됨.
    • 객체(Object): 클래스를 기반으로 실제로 생성된 인스턴스. 각 객체는 고유한 상태를 가질 수 있고, 클래스에서 정의한 메서드를 호출할 수 있음.
  2. 캡슐화 (Encapsulation):

    • 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶음.
    • 정보 은닉을 통해 객체 내부의 상세한 구현을 숨기고 외부에서는 필요한 기능만 사용할 수 있도록 함.
  3. 상속 (Inheritance):

    • 이미 존재하는 클래스의 특성(멤버 변수와 메서드)을 다른 클래스에서 재사용하는 개념.
    • 코드의 재사용성을 높이고, 클래스 간의 계층 구조를 형성함.
  4. 다형성 (Polymorphism):

    • 하나의 인터페이스나 클래스를 사용하는 다양한 방법.
    • 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현됨.

자바에서의 객체지향 프로그래밍 구현:

  1. 클래스 정의:

    • 자바에서 클래스는 class 키워드를 사용하여 정의됨.
    public class Car {
        // 멤버 변수
        String brand;
        int year;
    
        // 생성자
        public Car(String brand, int year) {
            this.brand = brand;
            this.year = year;
        }
    
        // 메서드
        public void start() {
            System.out.println("The car is starting.");
        }
    }
  2. 객체 생성:

    • new 키워드를 사용하여 클래스의 인스턴스를 생성함.
    Car myCar = new Car("Toyota", 2022);
  3. 캡슐화:

    • 멤버 변수는 보통 private으로 선언하고, 접근자 메서드(getters, setters)를 통해 접근 및 수정함.
    public class Car {
        private String brand;
        private int year;
    
        // Getter
        public String getBrand() {
            return brand;
        }
    
        // Setter
        public void setBrand(String brand) {
            this.brand = brand;
        }
    }
  4. 상속:

    • extends 키워드를 사용하여 부모 클래스를 상속받음.
    public class SportsCar extends Car {
        // 추가적인 멤버 변수 및 메서드 정의 가능
    }
  5. 다형성:

    • 오버로딩과 오버라이딩을 통해 다형성을 구현할 수 있음.
    public class Animal {
        public void makeSound() {
            System.out.println("Some generic sound");
        }
    }
    
    public class Dog extends Animal {
        @Override
        public void makeSound() {
            System.out.println("Woof!");
        }
    }
    
    public class Cat extends Animal {
        @Override
        public void makeSound() {
            System.out.println("Meow!");
        }
    }

자바의 객체지향 프로그래밍 특징은 코드의 재사용성, 유지보수성, 확장성을 높이는 데 기여합니다. 객체지향 프로그래밍의 개념을 이해하면 더 효율적이고 모듈화된 코드를 작성할 수 있습니다.