클래스와 객체
📚 참고
자바의 정석 기초편 (객체지향개념만)
클래스와 객체
- 클래스 정의 : 객체를 정의해 놓은 것
- 클래스 용도 : 객체를 생성하는데 사용
- ex) 제품 설계도, TV 설계도
- 객체 정의 : 실제로 존재하는 것. 사물 또는 개념
- 객체 용도 : 객체가 가지고 있는 속성(변수)과 기능(메서드)에 따라 다름
- ex) 제품, TV
객체의 구성요소
- 객체 = 속성(변수) + 기능(메서드)
- 속성(변수) : 색상, 전원, 채널
- 기능(메서드) : 켜기, 끄기, 채널 변경하기
// Tv 클래스
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp { channel++; }
void channelDown() { channel--; }
}
객체와 인스턴스
- 객체 : 모든 인스턴스를 대표하는 일반적 용어
- 인스턴스 : 특정 클래스로부터 생성된 객체 (ex. Tv 인스턴스)
정리
Q. 클래스가 왜 필요한가?
A. 객체 생성을 위해 (클래스 = 설계도, 객체 = 제품)
Q. 객체가 왜 필요한가?
A. 객체를 사용하기 위해
Q. 객체를 사용한다는 것은 어떤 의미인가?
A. 객체가 가진 속성과 기능을 사용한다는 것
한 파일에 여러 클래스 작성
- 원래는 하나의 파일에 하나의 클래스, 그러니까 1:1 관계가 보통임
Hello2.java
public class Hello2 {}
class Hello3 {}
- public class가 있는 경우, 소스파일의 이름은 반드시 public class명과 일치해야한다.
- 하나의 소스파일에는 하나의 public class만 존재해야한다.
Hello2.java
class Hello2 {}
class Hello3 {}
- public class가 없는 경우, 소스파일의 이름은 둘 다 가능하다.
- 하나의 소스파일에 클래스가 2개 있는 경우 main 메서드가 있는 클래스명과 소스파일명이 같아야 이클립스(IDE)가 실행할 수 있다.
객체의 생성과 사용
객체의 생성
- 해당 클래스 타입의 참조변수 선언
- 해당 클래스로부터 인스턴스 생성
- 생성된 인스턴스를 참조변수에 저장
class Tv {
// Tv의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의 기능(메서드)
void power() { power = !power; } // TV를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel; } // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // TV의 채널을 낮추는 기능을 하는 메서드
}
Tv t;
t = new Tv();
// 한 줄로 간단하게 표현
Tv t = new Tv();
객체의 사용
t.channel = 7; // 변수 사용
t.channelDown(); // 메서드 사용
예제-1
Tv t1 = new Tv();
Tv t2 = new Tv();
t1.channel = 7;
System.out.println(t1.channel); // 7
System.out.println(t2.channel); // 0
예제-2
Tv t1 = new Tv();
Tv t2 = new Tv();
t2 = t1;
t1.channel = 7;
System.out.println(t1.channel); // 7
System.out.println(t2.channel); // 7
정리
- 하나의 인스턴스를 여러개의 참조변수가 가리키는 것 ➡ 가능
- 여러개의 인스턴스를 하나의 참조변수가 가리키는 것 ➡ 불가능
객체 배열
- 객체 배열 == 참조변수 배열
// 객체를 생성하여 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
클래스 정의
- 설계도
- 데이터 + 함수의 결합
- 사용자 정의 타입
데이터 + 함수의 결합
- 데이터 저장공간의 히스토리
- 1. 변수 : 하나의 데이터를 저장할 수 있는 공간
- 2. 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
- 3. 구조체 : 서로 관계있는 여러 종류의 데이터를 하나로 저장할 수 있는 공간
- 4. 클래스 : 서로 관계있는 데이터 + 함수의 결합 (구조체 + 함수)
사용자 정의 타입
- 원하는 타입을 직접 만들 수 있다.
- 서로 관련된 것들을 강하게 묶어줄 수 있다.
- 코드가 덜 복잡해지고 유지보수가 수월하다.
비객체지향적
int hour = 12;
int minute = 34;
int second = 56;
객체지향적
class Time {
int hour;
int minute;
int second;
}
Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;
'JAVA > 객체지향개념' 카테고리의 다른 글
기본형 매개변수, 참조형 매개변수 차이점 (0) | 2021.03.09 |
---|---|
호출 스택 (Call Stack) (0) | 2021.03.07 |
메서드 (Method) (0) | 2021.03.06 |
선언위치에 따른 변수종류 (0) | 2021.03.06 |
객체지향 언어 (0) | 2021.03.02 |
댓글
이 글 공유하기
다른 글
-
호출 스택 (Call Stack)
호출 스택 (Call Stack)
2021.03.07 -
메서드 (Method)
메서드 (Method)
2021.03.06 -
선언위치에 따른 변수종류
선언위치에 따른 변수종류
2021.03.06 -
객체지향 언어
객체지향 언어
2021.03.02