1. 대상 선정: 손오공, 크리링, 천진반



2. 객체 모델링:
* 사람
- 명사적: 눈, 코, 입, 귀, 눈썹, 목, 얼굴, 머리카락, 몸체, 팔, ...
- 동사적: 먹는 일, 자는 일, 공부하는 일, 걷는 일, 노는 일, ...
3. 클래스 작성

- Class diagram을 통해 클래스를 작성하고, 클래스 간의 관계를 설정
public class Person{
.
.
}
public class UsePerson{
. // 객체 생성
.
}
4. 객체 생성
Person p = new Person();
5. 객체 사용
p.eat();
* polymorphism (다형성)
- 객체 다형성, method 다형성(Overload/Overloading, Override/Overriding) 두 가지를 제공.
* method overload (method overloading)
- 하나의 클래스 안에서 같은 이름의 method를 여러 개 정의해야 할 때 사용.
- java는 클래스 안에서 같은 이름의 method를 하나만 정의할 수 있다.
- 장점) 편의성
- 규칙) 어떤 method를 호출하는가? 를 알 수 있도록 만들면 된다. => parameter 관련
접근지정자는 달라도 되고, 반환형 달라도 되고, method명은 같아야 한다.
매개변수는 반드시 달라야 한다.
public void test(){ }
public void test(int i){ }
public void test(long l){ }
public void test(int i, int j){ }
public void test(int paramA, int paramB){ } // error
test(2024, 1); // 어떤 method를 호출해야할지 모르기 때문에 error가 발생한다.


* constructor (생성자)
- 객체가 생성될 때 기본적으로 가지고 있어야 할 값이나, 실행되어야 할 코드를 정의하는 method의 일종.
- 직접 호출되지 않는다. (new에 의해서만 호출)
- 상속되지 않는다.
- 클래스의 이름과 동일하게 만들어지고(대문자로 시작한다.), 반환형이 없다.
- this나 super를 사용하여 클래스 내의 다른 생성자를 호출할 수 있다.
- 생성자는 Overload가 된다. (객체 생성을 다양하게 할 수 있다.)
- 개발자가 생성자를 하나도 정의하지 않으면 compiler가 매개변수 없는 기본 생성자(default constructor)를 생성해준다. 개발자가 생성자를 하나라도 정의하면 compiler는 기본 생성자를 생성하지 않는다.
문법)
접근지정자 클래스명(매개변수 ,,,, ){
// 객체가 생성될 때 가지고 있어야 할 기본 값 설정
// 객체가 생성될 때 실행되어야 할 코드 정의
}
- 개발자가 생성자를 하나도 정의하지 않으면 클래스의 접근지정자와 동일한 접근지정자가 붙어있는 생성자가 생성된다. (default constructor)



* JVM의 memory
class Test{
static int i;
int j;
public static void main(String[] args){
int k = 0;
Test t = new Test();
Test t2 = new Test();
}
}
실행)
java Test

* method 영역: 실행되는 코드 적재, static 변수가 저장, 가장 먼저 실행
* stack 영역: 지역변수 저장
* instance 영역: instance 변수가 저장, new로만 사용 가능. (instance 객체)
* call by value
- 값 복사
- method의 매개변수가 기본형을 가지면, 값은 복사되어 전달된다.
public class CallByValue{
public void swap(int i, int j){
int temp = 0;
temp = i;
i = j;
j = temp;
System.out.println("swap 안 i: " + i + ", j: " + j); // i = 1, j = 2024
}
public static void main(String[] args){
CallByValue cbv = new CallByValue();
int i = 2024, j = 1;
System.out.println("swap 전 i: " + i + ", j: " + j); // i = 2024, j = 1
t.swap(i, j);
System.out.println("swap 후 i: " + i + ", j: " + j); // i = 2024, j = 1
}
}

'study > Java' 카테고리의 다른 글
| [sist] 2024.01.12_Java : String(문자열), Regular Expression(정규식), Array(배열) (1) | 2024.02.03 |
|---|---|
| [sist] 2024.01.11_Java : call by reference, this, 객체화, String(문자열) (3) | 2024.02.03 |
| [sist] 2024.01.08_Java : while, variable(변수), method(일) (1) | 2024.02.03 |
| [sist] 2024.01.04_Java : 조건문-switch~case, 반복문-for문, continue (3) | 2024.02.03 |
| [sist] 2024.01.03_Java : Arguments, Flow Chart, 조건문-if문 (2) | 2024.01.28 |