객체 지향 프로그래밍

개발냥이·2025년 4월 2일

데브코스

목록 보기
36/75
post-thumbnail

객체 지향 프로그래밍

데이터를 객체로 묶어 관련 기능을 함께 관리하는 프로그래밍 패러다임이다.
JS는 객제 기반 언어이다.


객체 지향 프로그래밍을 사용하는 이유

예전에는 위에서 아래로 코드가 실행되는 구조적 프로그래밍 방식이었다
이 방식은 중간에 설계나 사용자 요구사항이 변경되어도 프로그래밍을 수정하지 못하는 단점이 있었고 그래서 객체 지향 프로그래밍이 등장하였다.


캡슐화

은닉하다 , 숨긴다는 의미로 변수와 함수를 하나의 단위로 묶는 것이다.
외부에서 접근 및 통제를 못하게 하여 무결성을 보장한다!!

class Person {
    private String name; 

   
    public Person(String name) {
        this.name = name;
    }

    
    public String getName() {
        return name;
    }

   
    public void setName(String name) {
        this.name = name;
    }
}

public class Test {
    public static void main(String[] args) {
        Person person = new Person("Alice"); 
        System.out.println(person.getName()); //'Alice'
        person.setName("Bob");
        System.out.println(person.getName()); // "Bob" 
    }
}

위의 코드에서 getName()과 setName()에 외부에서 접근하기 위해
Person person = new Person("Alice"); <- 객체를 생성한 후
접근하는 모습이다.

이렇게 직접 접근하지 못하게 하여 데이터의 무결성을 보장하는 것이
캡슐화
이다!!


상속

현실에서 재산을 상속 받는 것처럼
이미 완성된 클래스를 다른 클래스에 상속할 수 있다.

class dog {
  constructor(name, age) {
    this.name = name; //멤버변수 (힙 메모리)
    this.age = age; //멤버변수 (힙 메모리)
  }
  speak() {
    console.log(`${this.name}이 짖습니다.`);
  }
}

class cat extends dog {
  constructor(name, age) {
    super(name, dog);
  }

  speak() {
    console.log(`${this.name}이 양옹합니다.`);
  }
}

// dog의 생성자를 상속받아 사용
const myCat = new Cat('whiskers', 3);
myCat.speak(); // whiskers이 야옹합니다.

자식 클래스인 cat가 부모 클래스인 dog로 부터 상속받아
멤버변수인 name과 , age를 사용하는 모습이다.

참고로 위의 코드는 오버라이딩의 예시이다.


다형성

하나의 객체에 여러가지 타입을 대입할 수 있는 것이다.

핸드폰의 기능을 생각했을 때 전화 , 문자 , 게임 등등 여러가지 요소들을 생각할 수 있는 것과 동일하다.

여기서 등장하는 이론이 오버로드(오버로딩)과 오버라이딩이다!!

📌오버로드 : 이름이 같은 함수일지라도 전달인자 타입이나 개수가 다른 경우

int plus(int a, int b){
    return a + b;
}
char plus(char a, char b){
    return a + b;
}
double plus(double a, double b){
    return a + b;
}

plus로 모두 이름이 같은 함수이지만 자료형이 달라 오버로드가 발생했다.

📌 오버라이딩 : 상속관계에서 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 다시 정의하는 것

int plus(int a, int b){
    return a + b;
}
char plus(char a, char b){
    return a + b;
}
double plus(double a, double b){
    return a + b;
}
profile
웹 개발자가 되고픈

0개의 댓글