캡슐화(Encapsulation) 이란?
- 서로 연관된 데이터와 함수를 함계 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
- 결합도가 낮아지고 재사용이 용이하다.
- 인터페이스 단순화
- 데이터의 무결성 보호
예시(캡슐화)
public class Person {
// private 접근 제어자로 필드 보호
private String name;
private int age;
// public 메서드로 필드 접근
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
}
상속(Inheritance) 이란?
- 상위클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법
- 코드의 재사용성을 높이고, 계층 구조를 통해 논리적인 모델 구성
예시(상속)
// 부모 클래스
public class Animal {
public void eat() {
System.out.println("This animal is eating.");
}
}
// 자식 클래스
public class Dog extends Animal {
public void bark() {
System.out.println("The dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat(); // 부모 클래스의 메서드 사용
myDog.bark(); // 자식 클래스의 메서드 사용
}
}
다형성(Polymorphism) 이란?
- 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 동일한 인터페이스를 통해 서로 다른 구현을 사용.
- 오버로딩(Overloading) : 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가지는 기법
- 오버라이딩(Overriding) : 상위 클래스에서 정의 한 일반 메서드의 구현을 하위 클래스에서 무시하고 재정의 할 수 있는 기법
예시(다형성)
// 메서드 오버로딩
public class MathUtils {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
// 메서드 오버라이딩
public class Animal {
public void makeSound() {
System.out.println("Some generic animal sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.makeSound(); // "Bark" 출력
}
}
추상화(Abstraction) 란?
- 공통 성질을 추출하여 추상 클래스를 설정하는 기법
- 추상 클래스와 인터페이스를 통해 구현.
예시(추상화)
// 추상 클래스
public abstract class Animal {
public abstract void makeSound(); // 추상 메서드
public void sleep() {
System.out.println("This animal is sleeping.");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
// 인터페이스
public interface Movable {
void move();
}
public class Car implements Movable {
@Override
public void move() {
System.out.println("The car is moving.");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // "Bark" 출력
myDog.sleep(); // "This animal is sleeping." 출력
Movable myCar = new Car();
myCar.move(); // "The car is moving." 출력
}
}
정보은닉(Information hiding) 이란?
- 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
- 메서드를 숨기고, 인터페이스를 통해서만 접근이 가능하도록 함.
- 캡슐화의 중요한 개념
'Java' 카테고리의 다른 글
| Java 기본 - 클래스(배열) (0) | 2024.11.19 |
|---|---|
| Java 기본 - 클래스, 객체, 인스턴스 (0) | 2024.11.11 |
| StringBuilder (0) | 2024.09.12 |
| 객체지향 프로그래밍 - 객체 지향 설계 원칙 (0) | 2024.05.30 |
| 객체지향 프로그래밍 - 객체 지향 구성요소 (0) | 2024.05.30 |