객체지향 프로그래밍(OOP) 개념 정리

admin | | 조회 11


[주요 목차]

캡슐화와 접근 제어자로 정보 숨기기

상속으로 코드 재사용하기

다형성과 인터페이스로 유연하게 설계하기


처음 객체지향 프로그래밍(OOP)을 접하면 용어가 너무 많아서 머리가 아프죠. 저도 처음엔 상속이랑 다형성이 헷갈려서 코드를 마구잡이로 짜다가 나중에 후회한 적이 많았어요. 이 글을 읽으면 객체지향 프로그래밍의 핵심 세 가지를 실전 예시와 함께 정리할 수 있어요. 특히 캡슐화, 상속, 다형성을 왜 쓰는지, 어떻게 쓰면 좋은지 바로 적용할 수 있는 팁까지 담았어요. 객체지향 프로그래밍(OOP)을 제대로 이해하면 코드가 훨씬 깔끔해지고 유지보수도 쉬워진다는 걸 느끼실 거예요.


객체지향 프로그래밍(OOP) 개념 정리 - 현장 스냅 1 - 객체지향프로그래밍객체지향 프로그래밍(OOP) 개념 정리 · 현장 스냅 1

캡슐화와 접근 제어자로 정보 숨기기

캡슐화는 객체가 가진 중요한 데이터를 외부에서 함부로 건드리지 못하게 막는 거예요. 예를 들어 은행 계좌 클래스를 만들 때 잔액 변수는 private으로 선언하고, 입출금은 메서드로만 처리하죠. 이렇게 하면 실수로 잔액이 마이너스가 되는 상황을 막을 수 있어요. public, protected, private, default 네 가지 접근 제어자를 상황에 맞게 쓰는 게 핵심인데, 처음엔 private부터 시작해서 필요한 것만 public으로 여는 습관을 들이세요. 자바스크립트처럼 접근 제어자가 약한 언어에서는 클로저나 #private 필드를 활용하는 방법도 알아두면 좋아요. 실제로 팀 프로젝트할 때 캡슐화를 잘 지키면 다른 사람이 내 코드를 함부로 수정하다가 버그가 생기는 걸 줄일 수 있답니다.

객체지향 프로그래밍(OOP) 개념 정리 - 핵심 장면 2 - 객체지향프로그래밍객체지향 프로그래밍(OOP) 개념 정리 · 핵심 장면 2

상속으로 코드 재사용하기

상속은 부모 클래스의 기능을 자식 클래스가 물려받는 방식이에요. 동물 클래스를 만들고 강아지, 고양이가 이를 상속받으면 eat() 같은 공통 메서드를 다시 안 써도 되죠. 하지만 부모 클래스를 너무 많이 바꾸면 자식 클래스들이 모두 영향을 받아서 ‘깨지기 쉬운 기반 클래스’ 문제가 생겨요. 그래서 상속은 “is-a” 관계가 명확할 때만 쓰는 게 안전해요. 실전에서는 상속 깊이를 2~3단계로 제한하고, 공통 기능은 인터페이스나 추상 클래스로 빼는 걸 추천해요. 이렇게 하면 나중에 데이터베이스 연결 클래스를 바꿀 때도 코드 수정 범위를 최소화할 수 있어요.

객체지향 프로그래밍(OOP) 개념 정리 - 핵심 장면 3 - 객체지향프로그래밍객체지향 프로그래밍(OOP) 개념 정리 · 핵심 장면 3

다형성과 인터페이스로 유연하게 설계하기

다형성은 같은 메서드 호출이라도 객체에 따라 다른 동작을 하는 거예요. Animal 타입 변수에 Dog나 Cat 객체를 넣어도 eat()를 호출하면 각자에 맞는 행동을 하죠. 여기서 진짜 강력한 건 인터페이스예요. JDBC에서 Connection, Statement 같은 인터페이스를 쓰면 오라클에서 MySQL로 바꿔도 코드 대부분을 그대로 쓸 수 있답니다. 상속만 쓰다 보면 다중 상속이 안 돼서 불편한데, 인터페이스는 여러 개를 구현할 수 있어서 유연성이 훨씬 높아요. 실무에서는 구체 클래스 대신 인터페이스 타입으로 변수를 선언하는 습관을 들이면 테스트하기도 쉽고, 나중에 확장할 때도 부담이 적어요.


[자주 묻는 질문]

객체지향 프로그래밍에서 캡슐화를 왜 꼭 해야 하나요?

캡슐화를 하면 내부 데이터가 외부에서 함부로 변경되는 걸 막을 수 있어요. 예를 들어 계좌 잔액을 private으로 두고 메서드로만 제어하면 잘못된 값이 들어가는 걸 방지하죠. 팀 프로젝트나 유지보수 단계에서 실수로 인한 버그를 크게 줄여줍니다.

상속 대신 인터페이스를 쓰는 게 더 나은 경우는 언제인가요?

여러 동작을 동시에 가져야 하거나, 구체적인 구현을 나중에 결정하고 싶을 때 인터페이스가 유리해요. JDBC처럼 데이터베이스 종류를 바꿔도 코드 변경을 최소화할 수 있죠. 상속은 단일 계층 구조라 유연성이 떨어지는 경우가 많아요.

다형성을 활용하면 코드가 어떻게 간단해지나요?

부모 타입이나 인터페이스 타입으로 변수를 선언하면 실제 객체가 바뀌어도 코드를 거의 수정하지 않아도 돼요. 동물 예시처럼 eat() 하나만 호출해도 각 동물이 다르게 행동하죠. 이렇게 하면 if-else 분기가 줄어들고 확장성도 좋아집니다.

목록
글쓰기
한국 서버호스팅
전체보기 →

댓글 0