반응형
✅ 설명:
“인터페이스는 클래스가 따라야 할 규칙을 정해놓는 설계도”
→ 그래서 클래스는 인터페이스에 맞춰서 정해진 대로 구현해야 함.
🎯 쉽게 비유해볼게:
📋 인터페이스 = 계약서, 규칙서, 메뉴판
“이 인터페이스를 쓰는 클래스는
꼭 이런 기능들을 만들어야 함!”
📦 클래스 = 계약서에 따라 기능을 만드는 사람
- 인터페이스에 void play();가 있으면
- 클래스를 만드는 사람은 무조건 play()를 구현해야 함!
🧱 자바에서 클래스 설계는 이렇게 !
1. 대상을 정의한다 → 뭐를 만들 건지
💬 예: “고양이”라는 객체를 만들 거야
2. 속성(가진 것) → 변수로 만든다
고양이가 무엇을 가지고 있는지?
예:
- 품종
- 색상
- 나이
- 이름

3. 행동(행하는 것) → 메서드로 만들어
고양이가 무엇을 할 수 있는지?
예:
- 먹다 (eat())
- 야옹하다 (meow())
- 잠자다 (sleep())

🎯 최종 예시 – Cat 클래스

💡 그래서 정리하면?
개념자바 코드에선
대상의 이름 | 클래스 이름 (Cat) |
가진 것 | 필드(변수) |
행하는 것 | 메서드(기능) |
**"대상을 정의할 때 크리티컬한(핵심적인) 부분을 골라야 한다"**
는 건 정확하고 필요한 것만 클래스로 담아야 한다는 뜻.
🧠 왜 "크리티컬한 부분"만 골라야 할까?
- 불필요한 정보까지 다 넣으면 복잡해짐
- 예: 고양이 클래스에 "코털 길이", "왼쪽 앞발 무늬", "옆집 강아지 이름"까지 넣으면... 쓸데없이 무거운 코드가 됨
- 정말 필요한 행동만 구현해야 효율적임
- 예: 고양이가 "프로그래밍을 한다"는 메서드는 불필요함
✅ 그래서 클래스 설계할 때는 이렇게 생각해:
질문예시
이 대상의 정체성을 보여주는 속성은? | 고양이 → 품종, 색상, 나이 |
이 대상이 진짜로 할 수 있는 행동은? | 먹기, 야옹하기, 잠자기 |
이 프로그램에서 이 대상의 역할은 무엇인가? | 고양이의 활동을 표현하는 것 |
📦 예시: "자판기" 클래스를 만든다
- ❌ 잘못된 설계
- 속성: 자판기 바코드, 전선 길이, 기계 제조일, 나사 개수
- 행동: 안마 기능, 고양이 소리 내기
- ✅ 좋은 설계
- 속성: 상품 목록, 잔액, 위치
- 행동: 돈 받기, 상품 선택, 상품 내보내기
🧩 핵심 요약
"그 객체를 설명할 때 빠지면 안 되는 '본질적인 특징과 역할'만 추려라."
이게 바로 "크리티컬한 부분"을 담는다는 뜻
클래스(또는 객체)들 끼리 구분할 수 있는 요소,
바로 그게 클래스 설계의 "핵심 속성"이고, 크리티컬 포인트야. 👇
🔍 그들끼리 구분할 수 있는 요소는?
"객체의 정체성을 구분 짓는 속성"
이걸 기준으로 클래스가 의미를 갖고,
인스턴스(객체)끼리 구별이 가능해짐
예시 1: 🐱 고양이 클래스
- 이름 → "나비", "치즈" (구별 가능)
- 품종 → "페르시안", "러시안블루" (행동은 비슷하지만 외형이나 특성이 다름)
- 특징 색상 → 고양이끼리 구분됨
→ 이렇게 고양이마다 다른 값이 들어가서 개체를 구별할 수 있음.
예시 2: 🚗 자동차 클래스
- 차 번호 → 유일함
- 모델명 → "소나타", "테슬라"
- 연료 종류 → 전기, 휘발유, 디젤
→ 이 속성들로 자동차 객체 하나하나를 식별 가능함.
🎯 클래스 설계 시 핵심 기준
체크포인트설명
이 속성으로 구분이 되는가? | 예: 이름, ID, 고유 번호 |
이 속성이 있어야 객체가 의미 있는가? | 예: 학생의 학번, 상품의 가격 |
이 행동은 이 객체만 하는 특징인가? | 예: 고양이만 "야옹", 강아지는 "멍멍" |
📌 정리
"객체를 구별할 수 있는 속성"이 있어야 클래스를 설계할 수 있다.
그게 없으면 그냥 데이터 덩어리일 뿐
✅ 클래스(Class)의 기본 구성 요소
- 필드(Field) = 변수 = 속성
- 클래스의 상태나 데이터를 저장
- 객체마다 가지는 값 → 인스턴스 변수
- 메서드(Method) = 기능
- 객체가 할 수 있는 행동이나 기능
- 어떤 입력값을 받아서 처리를 하고 결과를 반환할 수도 있음
- 생성자(Constructor)
- 객체가 처음 생성될 때 딱 한 번 호출
- 객체의 초기 상태를 설정
- 이름은 클래스와 동일하며, 리턴 타입 없음
🎯 예시 (Java)
요약하자면 클래스는:
속성(필드) + 기능(메서드) + 초기화(생성자)
로 이루어져 있음! ✅
🧩 클래스는 두 가지로 구성됨:
1️⃣ 속성 (변수)
- 고양이의 특징
- 품종 → String breed
- 색상 → String color
2️⃣ 기능 (메서드)
- 고양이가 할 수 있는 행동
- 밥 먹기 → eat()
- 긁기 → scratch()
- 야옹하기 → meow()
💡 정리하자면:
- 클래스 = 고양이 설계도
- 객체 = 설계도로 찍어낸 고양이 인형
- 인스턴스 = 클래스를 가지고 실제로 만든 객체 (== 실체)
예시:

이 때 cat1, cat2, cat3는 모두 Cat 클래스의 인스턴스!
즉, 고양이 인스턴스가 세 개 ✅
🐱 객체 생성 문법 설명

부분의미
Cat | 클래스 이름 (고양이 설계도) |
catObj | 객체 이름 (고양이 한 마리 실체, 인스턴스) |
new Cat() | 메모리에 새로운 Cat 객체 생성 → 생성자 호출 |
📌 순서별로 설명하면:
- Cat 클래스 설계를 바탕으로
- new 키워드를 통해
- 실제 메모리에 객체 생성 → Cat() 생성자 호출
- catObj라는 이름으로 해당 객체를 참조 (이름표 달기)
🧠 한 줄 정리
new는 객체를 실제로 만드는 키워드
catObj는 그 객체를 가리키는 변수
#클래스 #객체지향 #속성 #행동 #메서드 #필드 #변수 #상속 #다형성 #추상화 #캡슐화 #생성자 #this키워드 #오버라이딩 #오버로딩 #인터페이스 #추상클래스 #클래스설계 #객체지향프로그래밍 #인스턴스
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
java 초기화 방식 3가지 (0) | 2025.04.10 |
---|---|
java 숫자를 문자열로 적는 이유 (0) | 2025.04.10 |
java 인터페이스 + implements (1) | 2025.04.10 |
java 객체지향 프로그래밍 (0) | 2025.04.10 |
파라미터(Parameter) 란 ? + 오버로딩 (0) | 2025.04.09 |