코딩짜는 일상

[현대이지웰 Java 풀스택 개발자 아카데미 6월] TIL 5주차 - JAVA 객체지향 프로그래밍 본문

TIL

[현대이지웰 Java 풀스택 개발자 아카데미 6월] TIL 5주차 - JAVA 객체지향 프로그래밍

Remily 2025. 8. 12. 23:49
반응형

📚 서론

저번주까지 해서 약 2주라는 기간동안 JAVA와 객체지향 프로그래밍에 대해 배우게 되었습니다.

 

데이터 타입, 메모리 사용 영역(메소드,힙,스택), 생성자,

static, share, 싱글톤, final, 타입변환과 다형성, Casting, 제네릭, 예외처리 등등

 

많은 걸 배웠지만 결국 JAVA라는 언어의 핵심은 객체지향인 것 같아서

이걸 중심으로 다른 개념들을 한 번 더 정리해보려고 합니다.

가보자구! 출처:giphy

 

 

 

 

 

🎷 객체지향이란?

객체지향을 가볍게 정의해보자면, 프로그램을 더 잘 정리정돈 해서

유지보수도 쉽고 이후 확장하기도 쉽게 만들어주는 프로그래밍 기법 중 하나

라고 할 수 있겠습니다.

 

 

예시로 제가 지금 사는 "집"을 하나의 프로그램이라고 가정하자면 🏠

집에는 화장실🛁, 공부방🤓, 침실🛌, 주방👩‍🍳 등의 공간이 구성되어 있을 것이고

지금 있는 공부방을 구성하는 요소들로는 노트북, 책상, 의자, 스탠드조명, 책, 에어컨, 선풍기 등이 있겠죠.

 

 

1️⃣ 메소드와 변수

여기서 방을 구성하는 작은 요소들은 메소드 또는 변수로 비유되며

메소드는 무언가의 동작을 수행하는 것이고

변수는 그 동작에 필요한 값입니다.

노트북으로 현대이지웰 수업 듣는 중✨ 출처:giphy

 

비유하자면 노트북은 강의를 보여주는 기능을 하는 메소드인 것이고

전기와 멀티탭은 노트북을 사용할 수 있게 해주는 변수라고 할 수 있습니다.

 

2️⃣ CLASS

더 나아가 집을 구성하는 각각의 방은 Class로 비유되며

메소드와 변수를 용도에 맞게 묶어둔 그룹핑 단위라고 할 수 있습니다.

구성요소로 인해 용도가 정해지는 방🚪 출처:giphy

 

방 안에 무엇이 들어있는냐에 따라 방의 용도가 정해지듯이

Class도 안에 어떤 변수와 메소드가 들어있냐에 따라 용도가 결정됩니다.

 

 

그렇게 최종적으로 만들어진 class들을 각자의 용도에 맞게 사용하면

그것이 객체지향 프로그래밍이라고 이해하였습니다.

가끔은 집이 알아서 날 찾아오면 좋겠다🥲 출처:giphy

 

 

 

 

 

🎺 객체지향의 핵심 개념

객체지향에 대해 대략적인 설명이 끝났으니 이제 객체지향의 핵심 개념에 대해 설명해 보겠습니다!

 

1️⃣ 캡슐화 (Encapsulation)

캡슐화는 관련된 데이터와 그 데이터를 활용할 메서드를 Class라는 하나의 덩어리로 묶어두고

중요한 요소는 private로 숨겨두고 밖으로 보여줄 요소만 public으로 접근할 수 있게 해주는 기법입니다.

 

노트북💻으로 비유하자면 노트북 케이스 안에 숨겨진 회로도와 부품🛠️들은 private로 숨겨진 중요 요소들인 것이고

노트북으로 강의를 들을 수 있게 해주는 화면 액정, USB포트, 키보드, 터치패드🖱️는 public으로 접근이 허용된 요소들이 됩니다.

 

 

즉, private 요소들은 외부로부터 손상되지 않도록 보호받을 뿐 아니라

함부로 악용되지 않도록 외부에서의 접근을 차단하여 보안성을 높일 수 있습니다.

 

public 요소들은 사용자가 노트북 시스템에 접근하여 기능을 사용할 수 있게 해주고

USB포트처럼 다른 클래스와도 연결되어 확장할 수 있겠죠.

투명해서 보이는 쪽이 public 불투명해서 안 보이는 쪽이 private 출처:unsplash

 

정리하자면 캡슐화의 요점은 핵심 해당 클래스에 어떻게 접근할 수 있는가 입니다.

 

 

 

2️⃣ 상속(Inheritance)

상속은 원본 클래스(부모 클래스)의 특성을 다른 새로운 클래스(자식 클래스)가 물려받아 사용할 수 있는 기능입니다.

 

 

제가 인테리어를 한다고 가정해보죠!

 

저는 블랙과 그레이 톤을 좋아하고

입식 생활을 하기에 책상과 의자가 기본으로 있어야 합니다.

 

이것을 기본 전제로 두고 모든 방에 적용하되

각 방의 특성에 맞게 침실엔 침대가 추가되거나

주방에는 싱크대가 추가되고 화장실엔 세면대가 추가되는 등

약간의 차이점을 두어 집을 완성하였습니다.

 

 

이처럼 모든 방에 상속하여 동일하게 적용된 요소들을 부모 클래스에 비유할 수 있고

색상, 필수가구를 동일하게 적용하되, 특성에 맞게 수정 또는 확장된 방들을 자식 클래스에 비유할 수 있습니다.

상속(복제)했지만 특성에 맞게 조금씩 바뀌는 방🚪 출처:giphy

 

정리하자면 상속의 요점은 부모 클래스를 물려받아 어떻게 확장하느냐에 있습니다.

제 인테리어 취향을 상속 받아 꾸며진 저의 다른 방들처럼요.

 

 

 

3️⃣ 다형성(Polymorphism)

다형성은 때에 따라 다르게 사용할 수 있도록 하는 특성이라고 할 수 있습니다.

 

 

제 방에 스탠드를 예시로 들어보죠.

 

공부에 집중할 때는 주백색 빛이 눈이 편하기에 공부방에 스탠드는 주백색 전구를 씁니다.

하지만 책을 읽거나 휴식을 취할 땐 주광색 빛이 운치있어서 거실 스탠드는 주광색 전구를 씁니다.

마지막으로 침실은 잠을 자는 공간이기에 빛이 약한 전구색 전구를 씁니다.

 

 

이처럼 스탠드에 전구만 바꿔 각 방마다 다른 용도로 쓸 수 있게 하는 걸 다형성이라 할 수 있습니다.

그리고 전구를 바꾸는 것은 오버라이딩(Overriding)에 빗댈 수 있습니다.

오버라이딩은 동일한 메서드를 다른 용도로 쓸 수 있게 재정의 하는 기능 입니다.

용도에 맞게 전구를 바꿔 끼워 봅시다! 출처:unsplash

 

정리하자면 다형성의 요점은 같은 요청에 어떻게 다르게 동작하는가 입니다.

불을 켜달라는 제 요청에 전구를 바꿈으로써 공부용, 인테리어용, 침실용으로 쓰인 스탠드처럼요!

 

 

 

4️⃣ 추상화

마지막 추상화는 핵심 기능만 보여주고 복잡한 내부 구조는 숨겨버리는 개념입니다.

 

이렇게 말하니까 캡슐화하고도 비슷해서 많이 햇갈렸습니다.🥲

 

중요한 것은 숨기고 보여줄 부분만 보여주는 특성은 동일하지만

캡슐화는 숨긴것에 대한 접근을 어떻게 허용할 것인가이고

추상화는 단순히 눈에 안 보이게 숨겨서 단순화한 것에 가깝습니다.

 

 

추상화는 데스크 테리어에 빗댈 수 있을 것 같습니다.

강의를 수강할 노트북 한 대와 코드를 더 크게 보여줄 큰 모니터.

스탠드, 키보드, 마우스, 책상, 의자 등이 제가 공부할 때 필요한 기본 세팅입니다.

 

하지만 공부하는데는 모니터와 노트북의 연결 케이블, 전원 케이블 등

자질구레한 것들은 필요 없고 눈에 보이면 오히려 방해가 됩니다.

 

공부를 하기위해 필요하지만 중요하지 않은 복잡한 것들을 책상 아래로 정리해 숨겨버림으로써

공부를 할 수 있는 기능에만 집중하도록 한 것! 그것이 추상화라고 할 수 있겠습니다.

선 정리는 늘 귀찮고 어렵다😅 출처:unsplash

 

정리하자면 추상화의 요점은 복잡성을 제거하고 핵심만 노출하여

무엇을 할 수 있는가에 집중할 수 있게 하는 개념이라고 볼 수 있겠네요.

 

 

 

 

 

🔥 결론

처음에는 객체지향 언어라는 게 뭔지 잘 와닿지 않았고

파일 하나 열어서 그대로 계속 쓰면 될 걸

동작(?) 하나마다 새로 클래스를 만들고 심지어 그걸 실행할

메인 클래스를 따로 또 만드는 것이 번거롭게만 보였습니다.

 

하지만 수업을 따라가며 자바가 가진 기능을

하나씩 따라해보고 마지막으로 객체지향에 대해 배우면서

그제야 Java가 객체지향 언어라는 말이 어떤 의미인지를 깨달았습니다.

 

자바에 내장된 기능을 쓸 때 마저 객체를 만들고 메소드를 호출해야 했으니까요!

ex) 사용자 입력값 받기 : Scanner 클래스를 사용해 객체 생성 후 메소드 호출

 

 

사실 이번 포스팅에는 저번 수업에서 익숙한대로 함수형으로 만들었던 연습문제를

객체지향으로 리팩토링 하는 걸 포스팅 하고 싶었는데요...

 

수정하면서 개념이 조금 햇갈리길래 한 번 더 정리하면 도움이 될까 해서

객체지향 개념 정리로 결정했습니다.... ㅎㅎ

 

다음번 포스팅은 진짜 멋지게 리팩토링 하는 걸로 가져올게요! ✨😎✨

반응형