티스토리 뷰

Java를 통해 객체 지향 프로그래밍에 대해 알아보자.

 

  1. Encapsulation (캡슐화)
    : 캡슐화는 데이터(필드/속성)와 해당 데이터에서 작동하는 메서드를 단일 단위 또는 클래스로 묶는 개념이다. 데이터의 무결성을 보호하기 위해 객체의 일부 구성 요소에 대한 직접 액세스를 제한한다. 하기 코드에서 balanceBankAccount 클래스 안에 캡슐화되어 있다. deposit(), withdraw()와 getBalance() 메서드를 통해서만 액세스하거나 수정할 수 있다. 이는 잠재적으로 유해할 수 있는 직접적인 balance 조작을 방지한다.
    public class BankAccount {
        private double balance; // Private data member, not accessible outside
    
        public BankAccount(double initialBalance) {
            balance = initialBalance;
        }
    
        public void deposit(double amount) {
            if (amount > 0) {
                balance += amount;
            }
        }
    
        public void withdraw(double amount) {
            if (amount > 0 && amount <= balance) {
                balance -= amount;
            }
        }
    
        public double getBalance() {
            return balance;
        }
    }
  2. Inheritance (상속)
    : 상속은 한 클래스 (자식/서브클래스)가 다른 클래스(부모/수퍼클래스)의 속성과 동작(메서드)를 상속하는 메커니즘이다. 이는 코드 재사용성과 계층적 분류를 촉진한다. Car 클래스는 Vehicle 클래스를 상속한다. 이를 통해 CarVehiclebrandhonk() 에 액세스할 수 있다. Vehicle 을 확장함으로써 CarVehiclenon-private 멤버가 아닌 모든 멤버에 액세스하여 상속을 입증한다.
    public class Vehicle {
        protected String brand = "Ford";
    
        public void honk() {
            System.out.println("Beep beep!");
        }
    }
    
    public class Car extends Vehicle {
        private String model;
    
        public Car(String model) {
            this.model = model;
        }
    
        public void display() {
            System.out.println("Brand: " + brand + ", Model: " + model);
        }
    }
  3. Polymorphism (다형성)
    : 다형성을 사용하면 메서드를 호출하는 객체에 따라 메서드가 다르게 작동할 수 있다. 이는 일반적으로 Java에서 메서드 재정의와 메서드 오버로딩을 통해 이루어진다. Compile-time polymorphism (method overloading) 은 메서드의 이름은 같지만 매개 변수가 다른 경우에 발생한다. Runtime polymorphism (method overriding) 은 서브클래스가 수퍼클래스에 이미 정의된 메서드의 특정 구현을 제공할 때 발생한다.
    1. Overloading
      : add() 는 integer 및 double 매개변수를 모두 처리하도록 오버로드된다.
    2. Overriding
      : Dogsound() 는 Animalsound() 를 재정의한다. 런타임에 Dog 객체가 사용되면 Dog의 sound() 버전이 호출되어 다형성을 보여준다.
      // Method Overloading (Compile-time Polymorphism)
      public class MathOperations {
          public int add(int a, int b) {
              return a + b;
          }
      
          public double add(double a, double b) {
              return a + b;
          }
      }
      
      // Method Overriding (Runtime Polymorphism)
      public class Animal {
          public void sound() {
              System.out.println("Animal sound");
          }
      }
      
      public class Dog extends Animal {
          @Override
          public void sound() {
              System.out.println("Woof");
          }
      }
  4. Abstraction (추상화)
    : 추상화란 시스템의 복잡한 구현 세부 사항을 숨기고 사용자에게 필수 기능만 보여주는 프로세스다. 이는 종종 추상 클래스 또는 인터페이스를 사용해 수행된다. Shape은 추상 메서드를 area()를 가진 추상클래스로, 구현 없이 메서드의 시그니처만 정의한다. CircleRectanglearea()를 구현하는 구체적인 서브클래스다. 따라서 특정 도형의 세부 사항을 알 필요 없이 일반적인 방식으로 작업할 수 있다.
    public abstract class Shape {
        abstract double area(); // Abstract method (no body)
    }
    
    public class Circle extends Shape {
        private double radius;
    
        public Circle(double radius) {
            this.radius = radius;
        }
    
        @Override
        double area() {
            return Math.PI * radius * radius;
        }
    }
    
    public class Rectangle extends Shape {
        private double length;
        private double width;
    
        public Rectangle(double length, double width) {
            this.length = length;
        }
    
        @Override
        double area() {
            return length * width;
        }
    }


반응형

'기술(Tech, IT) > 자바(Java)' 카테고리의 다른 글

[Java] J2EE (Jakarta EE)  (0) 2024.11.03
[Java] Abstraction (추상화)  (0) 2024.11.02
[Java] Polymorphism (다형성)  (0) 2024.10.31
[Java] Encapsulation (캡슐화)  (0) 2024.10.31
[Java] compareTo method, Comparable interface  (0) 2022.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함
반응형