학습할 것
- 객체 지향 프로그래밍
- 클래스
- 정의하는 방법
- 구성요소
- 반환 자료형
- 속성
- 메서드
- 메서드
- 생성자
- this 키워드 이해하기
- 접근 제어자
- 객체
- 만드는 방법 (new 키워드 이해하기)
- 클래스 vs 객체 vs 인스턴스
1. 객체 지향 프로그래밍
- 프로그래밍하는 이론
- 한 개 이상의 클래스들이 서로 유기적으로 동작하는 것
2. 클래스
- 객체 지향 프로그래밍에서의 기본 단위
- 하나의 틀(붕어빵을 만드는 기계)
클래스는 특정 기능이나 목적을 하는 객체를 표현하기 위한 설계도나 틀로 생각하면 좋을 것 같습니다.
이러한 설계도는 객체를 만들기 위한 사이즈나 내용, 어떤 기능이나 동작을 하는지가 담겨있습니다.
클래스 정의하는 법
- [접근 제어자] [반환 데이터형] [메서드 이름] ( [매개변수]) {}
구성요소
- 반환 데이터 형 : 메서드 끝과 동시에 반환할 자료형
- 속성:
- 클래스 변수 : 하나의 클래스가 공유하는 변수, static 사용
- 인스턴스 변수 : 객체당 하나씩 가지고 있는 변수, 공유 X
- 메서드:
- 생성자 : 객체를 생성하기 위한 특별한 메서드
- 생성자 표기 없으면 기본 생성자가 존재
- 생성자 표기 시 기본 생성자 사라진다.
- 메서드 : 특정 기능에 대한 묶음, 함수와 같음
- 생성자 : 객체를 생성하기 위한 특별한 메서드
- this 키워드 : 자기 자신, 객체를 나타내는 표시입니다. 자신의 인스턴스 변수에 접근 가능합니다.
- 접근 제어자
클래스 내부에서 접근 | 같은 package안의 다른 클래스에서 접근 |
자식 클래스에서 접근 | 모든 클래스에서 접근 | |
Public | O | O | O | O |
Protected | O | O | O | X |
default | O | O | X | X |
Private | O | X | X | X |
3. 객체 (Object)
- 어떤 목적이나 기능을 가진 것
- 현실에서의 연필이나 붕어빵과 같은 물체
- 소리, 빛과 같은 실체가 없어도 객체가 될 수 있습니다.
- 클래스의 인스턴스
객체 만드는 방법
- [자료형] [변수명] = new [자료형](생성 매개변수)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
public class Example {
public static void main(String[] args) {
BreadMachine 잉어빵, 붕어빵; //객체
// 인스턴스 : 할당된 잉어빵 & 붕어빵
잉어빵 = new BreadMachine();
붕어빵 = new BreadMachine("붕어빵", 2);
System.out.println(붕어빵.info());
System.out.println("붕어빵 총 갯수 : " +BreadMachine.count);
}
}
class BreadMachine{ // 클래스
private static int money = 1000; // 클래스 변수
public static int count = 0;
protected int size; // 인스턴스 변수
String bread;
public BreadMachine() {
System.out.println("기본 생성자 입니다.");
count += 1;
}
public BreadMachine(String bread, int size){ // 생성자
System.out.println("생성자 입니다.");
this.size = size; // this 키워드
this.bread = bread;
count += 1;
}
public String info() { // 메서드
return this.bread + "2개" + Integer.toString(money) + "원 " + Integer.toBinaryString(this.size) + "배 크기";
}
}
|
cs |

5. 클래스 vs 객체 vs 인스턴스
지금까지 클래스와 객체에 대해 무엇인지와 사용방법에 대해 알아보았습니다. 그럼 객체와 인스턴스의 차이점은 어떻게 될까요?
클래스 vs 객체
객체는 클래스가 선언이 되어 JVM메모리에 생성이 되었으면 객체가 되는 것이다.
객체 vs 인스턴스
인스턴스는 선언된 객체가 JVM의 Heap 메모리에 새로 할당되었을 때
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Example {
public static void main(String[] args) {
BreadMachine 잉어빵, 붕어빵; //객체
// 인스턴스 : 할당된 잉어빵 & 붕어빵
잉어빵 = new BreadMachine();
붕어빵 = new BreadMachine();
}
}
class BreadMachine{ // 클래스
}
|
변수
클래스 변수와 인스턴스 변수는 별도 초기화 하지 않으면 자동 초기화 된다.
변수 타입 | 초기 값 |
char | '\u0000' |
byte, short, int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 or 0.0D |
boolean | false |
배열, 인스턴스 | nulll |
Final 변수
1
2
3
4
5
6
|
final class Bank { // 상속을 통한 서브 class 생성 불가
final int branch = 0; // 값 변경 불가
final void branchCnt() { // 오버라이딩을 통한 재정의 불가
final int a = 0; // 값 변경 불가
}
}
|
Static 변수
1
2
3
4
5
6
7
8
9
|
class Bank {
static int branch = 0; // 클래스 변수
static {
// 클래스 초기화 블럭
}
static void branchCnt() { // 클래스 함수
}
}
|
메소드 오버로딩 ( Method Overloading )
같은 메서드 이름, 다른 매개변수
같은 함수이지만 매개변수 값에 따라 다른 동작을 할때 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class Bank {
static int branch;
String name;
String location;
/**
* 생성자 오버로드
* Bank(String) and Bank(String, String)
*/
Bank(String name) {
this.name= name;
branch++;
}
Bank(String name, String loc) {
location = loc;
this.name = name;
branch++;
}
static void branchCnt() { // 클래스 함수
}
}
|
'JAVA > 자바스터디' 카테고리의 다른 글
JAVA - 제어자 (0) | 2022.11.14 |
---|---|
상속 (0) | 2022.11.13 |
[자바스터디] 4. 선택문, 반복문 (0) | 2022.01.06 |
[자바스터디] 3. 연산자 (0) | 2022.01.03 |
[자바스터디] 2. 변수 (0) | 2022.01.02 |