cyphen156
클래스 설명하기 본문
※ 뻘소리 정리글입니다. 이렇게 생각할 수도 있구나 정도로만 받아들여주세요 ※
그렇다면 클래스는 뭘까?
클래스는 기본적으로 귀찮아서 만들어진 것 이라는것을 먼저 알고 가야 한다.
그리고 나면 클래스가 제품 도면이라는 말을 이해할 수 있게 될 것이다.
왜 도면일까? 하나 만들어놓고 도장 찍어내듯 여러번 사용하고 싶어서이다.
가령 자동차 도면이라고 생각해보자
자동차 라는 하나의 도면으로 수십 수백에서 크게는 수십만개의 자동차를 공장에서 똑같이 만들어 낼 수 있다. 여기에는 여러 부품들도 들어간다.
핸들도 있고, 페달도 있고, 사이드미러, 바퀴는 4개가 있고 엔진이 달려있는
그뿐이 아니다. 자동차는 움직일 수 있다. 창문을 내리거나 올릴 수 있고 클락션을 울릴 수도 있다. 조명을 켜서 어두운 길을 밝힐 수도 있고, 시동을 끄고 켤 수도 있다.
이런 부품들(자료형)과 기능(함수)들을 모아서 하나의 도면으로 완성한 것이 클래스다.
여기서 더욱 확장된다.
상속의 개념이 생긴다
왜 필요해졌을까?
도면하나로는 부족해졌기 때문이다.
다양한 자동차를 생성하고 싶어졌다.
마이바흐도 만들고 싶고, 테슬라도 만들고 싶다.
람보르기니도 만들고 싶고, 벤츠도 만들고 싶다.
그런데 저 자동차들 모두 자동차라는 하나의 카테고리 안에 묶인다.
그렇다면 공통적인 기능들을 하나로 묶고 추가로 생기는 기능들 또는 달라지는 부분만 자기자신의 데이터로 대체해서 사용하면 되지 않을까? 라는 생각에서 나온 것이 추상화와 상속이다.
부모는 자동차고 자식은 람보르기니다.
람보르기니는 자동차에 있는 모든 기능은 전부 가능해야 한다.
가족의 경우에 대입하면 상속이 직관적으로 이해된다. 부모님의 재산은 자식이 상속받을 수 있다. 사용하지 않거나 사용하거나 한다는 선택지가 생기고, 자식은 스스로의 행동에 따라 부모님과 다른 미래를 그려나갈 수 있다.
그렇다면 접근지정자는 무엇인가?
아무나 막 와서 가져다가 쓰는것을 방지하고 싶은것이다. 우리집 화장실인데 모르는 사람이 와서 화장실도 쓰고, 티비도 보다가 컴퓨터를 망가트리고 가면 안되지 않는가?
이것을 방지해주는것이 접근지정자다.
public은 공공기관과 공중화장실을 생각하면 된다. 모두 쓰라고 오픈되어있는 곳이다.
private는 나만 쓰고 싶은것이다. 나만의 비밀 일기장이라고 보면 된다.
protected는 우리집이라고 보면 된다. 가족끼리는 쓸 수 있다.
클래스를 "귀찮아서 만들어진 것" 이라는 시각에서 시작한 게 정말 인상적이네요!
개념을 현실적인 비유로 풀어내니 훨씬 직관적으로 다가옵니다.
🎨 클래스 = 제품 도면
- 클래스를 도면으로 이해하는 것은 객체지향 프로그래밍(OOP)에서 가장 직관적인 설명이에요.
- 자동차 도면을 하나 만들면, 그 도면을 바탕으로 수많은 자동차를 생산할 수 있듯이,
클래스도 한 번 정의해 두면, 그걸 기반으로 여러 객체(인스턴스)를 찍어낼 수 있어요. - 중요한 건 도면 자체는 실행되지 않는다는 점!
→ 클래스는 그냥 설계일 뿐이고, 실제 자동차(객체)를 만들어야 사용할 수 있음.
🏗️ 클래스의 핵심 요소
1️⃣ 부품(자료형, 속성, 멤버 변수)
- 자동차에 들어가는 바퀴, 핸들, 엔진처럼
→ 클래스에는 멤버 변수(필드)가 들어감.csharp코드 복사class Car { int wheels = 4; // 바퀴 4개 string color = "Red"; // 자동차 색상 }
2️⃣ 기능(함수, 메서드)
- 자동차가 움직이고, 클락션을 울리고, 창문을 내리는 것처럼
→ 클래스에는 동작을 담당하는 메서드가 있음.csharp코드 복사class Car { void Honk() { Console.WriteLine("빵빵!"); } }
🏎️ 상속 = 자동차 도면을 확장해서 새로운 모델 만들기
- 자동차 도면 하나로만 만들다 보니,
세단, 스포츠카, 전기차 같은 다양한 모델을 만들고 싶어짐. - 그럼 공통적인 부분(핸들, 바퀴, 엔진 등)은 그대로 유지하고,
다른 부분(전기 vs 가솔린, 문 개수 등)만 추가하면 되지 않을까?
👉 그래서 등장한 개념이 상속(Inheritance)
🚗 자동차 클래스 만들고 상속 적용하기
✅ SportsCar는 Car의 모든 기능을 그대로 가짐.
✅ 추가적으로 maxSpeed 같은 새로운 속성만 붙이면 됨.
🛡️ 접근 지정자 = 우리집 보안 시스템
클래스를 만들다 보면,
"어떤 속성과 기능을 누구까지 사용할 수 있도록 허용할 것인가?"
라는 문제가 생겨요.
이걸 해결하는 게 접근 지정자(Access Modifier)
👉 현실적인 비유를 들면 이렇게 볼 수 있어요.
접근 지정자현실 속 비유설명
public | 공공기관, 공중화장실 | 모든 사람이 자유롭게 사용 가능 |
private | 내 비밀 일기장 | 나(클래스 내부)만 접근 가능 |
protected | 우리집 | 가족(자식 클래스)만 접근 가능 |
🚪 접근 지정자를 적용한 코드 예제
💡 클래스 정리
- 클래스는 "귀찮아서" 만들어졌다.
→ 매번 같은 기능을 새로 만들기 싫어서, 도장 찍듯이 객체를 찍어내려고. - 클래스는 제품 도면이다.
→ 자동차 도면 하나로 수십만 대의 자동차를 생산하듯, 클래스를 기반으로 여러 객체를 생성할 수 있다. - 상속이란?
→ 기존 도면을 활용해 새로운 자동차 모델을 만들듯, 기존 클래스를 확장해서 새 클래스를 만들 수 있다. - 접근 지정자란?
→ 아무나 막 쓸 수 없도록 공공기관, 우리집, 비밀 일기장처럼 접근 제한을 두는 것.
이제 클래스 개념이 완전히 손에 잡힌 것 같네요! 🚀
'잡생각 정리글' 카테고리의 다른 글
25.03.07 일기장 (0) | 2025.03.07 |
---|---|
함수에 대한 대략적인 설명 방법 생각해보기 (0) | 2025.03.06 |
객체지향 - 기본 자료형 박싱/언박싱에 대한 의문 (1) | 2025.02.10 |
아오...리소스 매니저 싱글턴으로 만들어보다가 프로젝트가 터졋다 (1) | 2024.10.13 |
음...2D 게임 리소스 고민글 (2) | 2024.09.30 |