티스토리 뷰
추상화는 사용자에게 구현 세부 사항을 숨기고 필수적인 특성만 노출하여 복잡한 시스템을 단순화하는 데 중점을 둔다. Abstract classes와 Interfaces 특정 구현을 강제하지 않고 동작을 정의함으로써 이를 용이하게 한다.
- Core Principles
- Interfaces vs. Abstract Classes
: 인터페이스는 동작을 정의하지 않고 계약을 지정하는 반면 (Java 8 이전), 추상 클래스는 부분적인 동작을 정의하고 공유 특성을 적용할 수 있다. - Implementation Hiding
: 추상화는 구현 세부 사항을 사용자에게 숨겨서 복잡성을 줄이고 코드 유지는 관리성을 향상시킨다.
- Interfaces vs. Abstract Classes
- Advanced Usage
- Abstract Classes with Concrete Methods
: 추상 클래스는 하위 클래스의 유틸리티 함수 역할을 하는 구체적인 메서드를 가질 수 있다. - Interfaces with Default Methods
: Java 8은 인터페이스에 기본 메서드를 도입해 기존 구현을 손상시키지 않고 메서드를 공유할 수 있게 됐다.
- Abstract Classes with Concrete Methods
- Real-World Application (실졔 애플리케이션)
- Database Access Layer
: 데이터베이스 액세스를 위한 인터페이스는 세부 사항을 추상화해 백엔드에서 클라이언트 코드에 영향을 주지 않고 한 데이터베이스 시스템에서 다른 데이터베이스 시스템으로 전환할 수 있도록 한다. - Payment Processing Systems
: 다양한 결제 게이트웨이에서 PaymentProcessor 인터페이스를 구현해 전자상거래 애플리케이션에 유연성을 부여할 수 있다.
- Database Access Layer
- Common Pitfalls (일반적인 함정)
- Interface Segregation
: 너무 많은 메소드를 포함하는 과부하 인터페이스는 Interface Segregation Principle (ISP, 인터페이스 분리 원칙)을 위반할 수 있다. 인터페이스를 특정 동작에 집중하도록 해야한다. - Improper Use of Abstract Classes
: 추상 클래스는 불필요한 복잡성을 초래할 수 있으므로 단순한 구체적인 클래스나 유틸리티 메서드로 충분할 수 있는 곳에 사용해서는 안된다.
- Interface Segregation
- Basic Interface
: 애플리케이션에 여러 유형의 결제 수단이 필요한 시나리오를 가정해보자. Payment 인터페이스를 정의해 모든 결제 클래스에 표준 구조를 적용할 수 있다.
public interface Payment { // Abstract method void processPayment(double amount); // Default method (Java 8+) default void initiatePayment() { System.out.println("Initiating payment..."); } // Static method (Java 8+) static void logPayment() { System.out.println("Logging payment transaction."); } } public class CreditCardPayment implements Payment { @Override public void processPayment(double amount) { System.out.println("Processing credit card payment of $" + amount); } } public class PayPalPayment implements Payment { @Override public void processPayment(double amount) { System.out.println("Processing PayPal payment of $" + amount); } } // Usage public class PaymentProcessor { public static void main(String[] args) { Payment creditCardPayment = new CreditCardPayment(); creditCardPayment.initiatePayment(); creditCardPayment.processPayment(100.0); Payment.logPayment(); Payment payPalPayment = new PayPalPayment(); payPalPayment.processPayment(50.0); } }
- Basic Abstract Class
: 다양한 유형의 직원 (예: 풀타임, 파트타임)을 이름 ID, 급여 계산과 같은 몇 가지 공통 기능과 상태로 표현해야 하는 시나리오를 생각해보자.
public abstract class Employee { private String name; private int id; public Employee(String name, int id) { this.name = name; this.id = id; } // Concrete method public String getName() { return name; } public int getId() { return id; } // Abstract method public abstract double calculateSalary(); } public class FullTimeEmployee extends Employee { private double salary; public FullTimeEmployee(String name, int id, double salary) { super(name, id); this.salary = salary; } @Override public double calculateSalary() { return salary; } } public class PartTimeEmployee extends Employee { private double hourlyRate; private int hoursWorked; public PartTimeEmployee(String name, int id, double hourlyRate, int hoursWorked) { super(name, id); this.hourlyRate = hourlyRate; this.hoursWorked = hoursWorked; } @Override public double calculateSalary() { return hourlyRate * hoursWorked; } } // Usage public class EmployeeProcessor { public static void main(String[] args) { Employee fullTime = new FullTimeEmployee("Alice", 101, 60000); System.out.println(fullTime.getName() + "'s Salary: $" + fullTime.calculateSalary()); Employee partTime = new PartTimeEmployee("Bob", 102, 20, 100); System.out.println(partTime.getName() + "'s Salary: $" + partTime.calculateSalary()); } }
반응형
'기술(Tech, IT) > 자바(Java)' 카테고리의 다른 글
[Java] Spring Framework (스프링 프레임워크) (0) | 2024.11.05 |
---|---|
[Java] J2EE (Jakarta EE) (0) | 2024.11.03 |
[Java] OOP concept (Object-oriented programming, 객체 지향 프로그래밍 개념) (1) | 2024.11.01 |
[Java] Polymorphism (다형성) (0) | 2024.10.31 |
[Java] Encapsulation (캡슐화) (0) | 2024.10.31 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Computer Graphics
- The Economist Espresso
- machine learning
- 소켓 프로그래밍
- C++
- join
- 리트코드
- Python
- 머신 러닝
- tf-idf
- 벡터
- 투 포인터
- java
- 컴퓨터 그래픽스
- socket programming
- 딕셔너리
- Vector
- DICTIONARY
- 이코노미스트
- 파이썬
- 이코노미스트 에스프레소
- Hash Map
- 안드로이드
- defaultdict
- ml
- vertex shader
- min heap
- leetcode
- Android
- The Economist
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형