1. 객체와 클래스
- 현실 세상에서 객체는 설계도를 바탕으로 만들어집니다. (집을 만들기 위해서는 설계도를 보고 만듭니다.)
- 자바에서의 설계도는 클래스입니다.
- 인스턴스: 특정 클래스로부터 만들어진 객체입니다.
- 인스턴스화: 클래스로부터 객체를 만드는 과정을 인스턴스화라고 합니다.
객체 지향 프로그래밍 개발의 단계
- 클래스 설계
- 설계된 클래스를 가지고 객체를 생성
- 생성된 객체들을 상호작용하여 완성된 프로그램 개발 완료
2. 클래스
클래스 선언
클래스 이름은 관례적으로 첫 자를 대문자로 작성합니다. (그 이후에는 낙타 표기법)
public class 클래스이름 {
// 필드(속성)
String 필드1;
int 필드2;
// 생성자 (기본 생성자)
public 클래스이름() {
}
// 메소드(동작)
void 메소드1() {
}
void 메소드2() {
}
}
[클래스 예시]
public class Computer {
// 필드 (고유 데이터)
String adminName;
String serialNumber;
// 필드 (상태)
boolean power;
// 필드 (부품)
Cpu cpu = new IntelCpu();
Gpu gpu = new NvidiaGpu();
Memory memory = new SamsungMemory();
// 생성자(기본)
public Computer() {
}
// 생성자
public Computer(String adminName, String serialNumber) {
this.adminName = adminName;
this.serialNumber = serialNumber;
}
// 메소드
void on() {
System.out.println("power on");
this.power = true;
}
void off() {
System.out.println("power off");
this.power = true;
}
int sum(int num1, int num2) {
return num1 + num2;
}
}
3. 클래스 구성 멤버
클래스 구성 멤버에는 필드(Field), 생성자(Constructor), 메소드(Method)가 있습니다.
1. 필드
- 객체의 데이터(고유 특성)가 저장되는 곳
- 객체의 고유 데이터, 부품 객체, 상태 정보를 저장
- 선언 형태가 변수와 비슷하지만, 필드를 변수라고 부르지 않습니다.
public class 클래스 {
// 필드
String 필드1;
int 필드2;
}
변수 vs 필드
변수: 생성자와 특정 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸
필드: 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재
변수는 JVM 스택 영역의 프레임 내부 로컬 변수 스택에 생성되지만 필드는 메소드 영역에 생성됩니다.
Runtime Data Area
JVM이 운영체제에서 할당받은 메모리 영역
2. 생성자
- 객체 생성 시 초기화 역할 담당
- 필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 합니다.
- 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없습니다.
public class 클래스 {
// 생성자 (기본 생성자)
public 클래스() {
}
}
3. 메소드
- 객체의 동작에 해당하는 실행 블록
- 메소드는 필드를 읽고 수정하는 역할도 있지만, 다른 객체를 생성해서 다양한 기능을 수행하기도 합니다.
- 메소드는 객체 간의 데이터 전달의 수단으로 사용됩니다. (객체 간 상호작용)
- 매개 값을 받을 수 있고, 실행 후 어떤 값을 리턴할 수도 있습니다.
public class 클래스 {
// 메소드(매개값x, 리턴값x)
void 메소드1() {
System.out.println("메소드 1");
}
// 메소드(매개값o, 리턴값o)
int 메소드2(int 매개변수1, int 매개변수2) {
return 매개변수1 + 매개변수2;
}
}
4. 클래스의 용도
1. 라이브러리 클래스
- API: Application Program Interface
- 개발에 유용한 여러 기능들을 모아놓은 클래스
2. 실행 클래스
- public static void main(String[] args) { ... }
- 실행 클래스는 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할을 합니다.
- 프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리고 단 하나가 실행 클래스
5. 객체 생성
- new 연산자와 클래스 타입 변수(참조 변수)를 활용
- new 연산자는 클래스로부터 객체를 생성시키는 연산자 (new 연산자 뒤에는 해당 클래스의 생성자을 선언 합니다.)
- new 연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소를 리턴합니다.
- 객체의 주소를 참조 타입인 클래스 변수에 저장해두면, 변수를 통해 객체를 사용할 수 있습니다. ( dot "." 연산자 활용)
- 같은 클래스로부터 생성되어도 각 객체는 고유 데이터를 가지면서 메모리에서 독립적으로 활동합니다.
// 1. 객체 생성
클래스 변수 = new 클래스생성자();
// 2. 객체 필드 및 메소드 접근
변수.필드;
변수.메소드();
예시
[Person 클래스]
import java.time.LocalDate;
public class Person {
String name;
LocalDate birthDay;
Person(String name, LocalDate birthDay) {
this.name = name;
this.birthDay = birthDay;
}
void personInfoPrint() {
System.out.println("name: " + this.name);
System.out.println("birthDay: " + this.birthDay);
}
}
[실행 클래스]
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
// new 연산자와 생성자를 이용하여 Person 객체 생성
Person person1 = new Person("veneas", LocalDate.now());
Person person2 = new Person("kim", LocalDate.of(1990, 5, 20));
// 객체의 메소드 활용
person1.personInfoPrint();
person2.personInfoPrint();
}
}
'Backend > 객체 지향 프로그래밍' 카테고리의 다른 글
[Java] 클래스의 구성 멤버 (메소드) (0) | 2022.04.07 |
---|---|
[Java] 클래스의 구성 멤버 (생성자) (0) | 2022.04.06 |
[Java] 클래스의 구성 멤버 (필드) (0) | 2022.04.05 |
[Java] 객체 지향 프로그래밍의 특징 (자바 소스 코드) (0) | 2022.04.03 |
[Java] 객체 지향 프로그래밍 (Object Orientied Programming) (0) | 2022.04.02 |