티스토리 뷰
기술(Tech, IT)/자바(Java)
[Java] OOP concept (Object-oriented programming, 객체 지향 프로그래밍 개념)
Daniel803 2024. 11. 1. 03:47Java를 통해 객체 지향 프로그래밍에 대해 알아보자.
- Encapsulation (캡슐화)
: 캡슐화는 데이터(필드/속성)와 해당 데이터에서 작동하는 메서드를 단일 단위 또는 클래스로 묶는 개념이다. 데이터의 무결성을 보호하기 위해 객체의 일부 구성 요소에 대한 직접 액세스를 제한한다. 하기 코드에서 balance는 BankAccount 클래스 안에 캡슐화되어 있다. 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; } }
- Inheritance (상속)
: 상속은 한 클래스 (자식/서브클래스)가 다른 클래스(부모/수퍼클래스)의 속성과 동작(메서드)를 상속하는 메커니즘이다. 이는 코드 재사용성과 계층적 분류를 촉진한다. Car 클래스는 Vehicle 클래스를 상속한다. 이를 통해 Car는 Vehicle의 brand 및 honk() 에 액세스할 수 있다. Vehicle 을 확장함으로써 Car는 Vehicle의 non-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); } }
- Polymorphism (다형성)
: 다형성을 사용하면 메서드를 호출하는 객체에 따라 메서드가 다르게 작동할 수 있다. 이는 일반적으로 Java에서 메서드 재정의와 메서드 오버로딩을 통해 이루어진다. Compile-time polymorphism (method overloading) 은 메서드의 이름은 같지만 매개 변수가 다른 경우에 발생한다. Runtime polymorphism (method overriding) 은 서브클래스가 수퍼클래스에 이미 정의된 메서드의 특정 구현을 제공할 때 발생한다.
- Overloading
: add() 는 integer 및 double 매개변수를 모두 처리하도록 오버로드된다. - Overriding
: Dog의 sound() 는 Animal의 sound() 를 재정의한다. 런타임에 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"); } }
- Overloading
- Abstraction (추상화)
: 추상화란 시스템의 복잡한 구현 세부 사항을 숨기고 사용자에게 필수 기능만 보여주는 프로세스다. 이는 종종 추상 클래스 또는 인터페이스를 사용해 수행된다. Shape은 추상 메서드를 area()를 가진 추상클래스로, 구현 없이 메서드의 시그니처만 정의한다. Circle과 Rectangle은 area()를 구현하는 구체적인 서브클래스다. 따라서 특정 도형의 세부 사항을 알 필요 없이 일반적인 방식으로 작업할 수 있다.
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
링크
TAG
- 리트코드
- DICTIONARY
- ml
- Android
- 컴퓨터 그래픽스
- 투 포인터
- 머신 러닝
- min heap
- 파이썬
- join
- 이코노미스트 에스프레소
- Hash Map
- 이코노미스트
- leetcode
- Vector
- Python
- 안드로이드
- The Economist
- machine learning
- C++
- vertex shader
- tf-idf
- socket programming
- defaultdict
- 딕셔너리
- 소켓 프로그래밍
- 벡터
- java
- The Economist Espresso
- Computer Graphics
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형