프로그래머스 스진초 과제를 진행하면서 작성한 내용입니다.
객체의 속성과 행위를 하나로 묶고, 구현 코드를 외부에 감춰 은닉하는것을 뜻한다.
다시 말하면 데이터와 처리 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것이다.
캡슐화
는 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향할 수 있게 도와준다.
모듈화는 모듈 단위의 코드 재사용이 가능하기 때문에, 코드 유지 보수에도 도움을 준다.
Public, Private, Protected
데이터를 직접 접근하는 것이 아닌 함수로 접근(get/set)
class BankAccount {
private double balance; // private
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
중요하고 필요한 정보 만을 표현하기 위해서, 객체의 공통적인 속성과 행위를 하나로 묶는 것을 의미한다.
추상 클래스, 인터페이스
abstract class Shape { // 추상 클래스
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("원을 그립니다.");
}
}
상위 클래스에서 정의된 기능을 가져와 재 사용하거나, 새로운 기능을 추가해 코드의 중복을 줄이고 재 사용성을 늘릴 수 있는 방법을 의미한다. 즉, 부모 클래스의 특성을 자식 클래스에서 재사용하는 개념이다.
class Animal {
void sound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
class Dog extends Animal {
void sound() {
System.out.println("강아지가 짖습니다.");
}
}
객체가 상속을 통해 기능을 확장, 변경하여 여러 형태의 객체로 재구성 되는 것을 의미한다. Overriding과 Overloading을 통해 다형성을 확보할 수 있다.
Overriding : 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용, 재사용성을 높임.
상위 클래스에 동일한 이름을 가진 함수가 있을 때, 하위 클래스에서 기능을 재 정의 하는 것을 의미한다.
class Animal { // Overriding (메서드 재정의)
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("강아지가 짖습니다.");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("고양이가 야옹합니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // "강아지가 짖습니다."
myCat.makeSound(); // "고양이가 야옹합니다."
}
}
Overloading : 하나의 클래스 안에 같은 이름을 가진 함수를 여러 개 만들 수 있게 해줍니다. 구분을 위해 함수의 인자들은 달라야 한다.
class Calculator {
int add(int a, int b) { // Overloading (메서드 오버로딩)
return a + b;
}
double add(double a, double b) { // Overloading (메서드 오버로딩)
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result1 = calculator.add(5, 10); // int 타입 파라미터 사용
double result2 = calculator.add(3.5, 2.5); // double 타입 파라미터 사용
System.out.println("Result 1: " + result1); // "Result 1: 15"
System.out.println("Result 2: " + result2); // "Result 2: 6.0"
}
}