클래스
먼저 배열의 단점은
- 개수 제한 (자료 구조)
- 같은 자료형만 사용 가능.
이와 같기에 좀 더 포괄하는 개념의 클래스가 나오게 된다.
구조체 + 메소드(함수) = 클래스 // 속성 (데이터) + 기능(메소드)
구조체 : 여러 자료형 변수를 하나의 변수로 관리
예를 들자면
붕어빵틀(클래스) - 붕어빵 (객체)
자동차도면(클래스) - 자동차(객체)
클래스 장점
- 클래스만으로는 메모리에 올라가지 않음, 객체화를 진행 해야 메모리에 올라감 (자원 효율성)
- 재사용성이 좋아짐.
클래스의 객체 생성자
new + 클래스명(); (default 생성자)
new Sample();
이런식으로 선언한다.
package Day16;
class A{
int a; // 멤버변수(속성)
void print(int a) { // 매개변수 또는 인자), 메소드(기능)
int b; // 메소드 변수 또는 지역변수
}
// default 생성자 -> 선언을 안하면 자동 추가
A(){
}
class B {
B(int a, int b) {
}
}
// B b = new B(); // 에러
// B b = new B(5,7); // 생성됩니다.
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
생성자와 메소드의 차이
생성자와 메소드 같은점
- 매개 변수 사용 똑같다
- 메소드와 같이 반복문 또는 조건문을 사용해서 기능을 만들 수 있다
생성자와 메소드의 다른점
- 생성자는 이름을 무조건 클래스 명과 같이 해야합니다
- 메소드와 다르게 생성시 한번만 호출 됩니다
- 리턴을 못합니다
생성자를 선언하면 무조건 그 형식으로 만들어야 합니다
매개 변수의 개수와 자료형을 맞춰서 제공을 해줘야 객체가 생성 됩니다.
흔히 쓰는 Scanner, Random
- Scanner sc = new Scanner(System.in); -> default 생성자 X 정의가 되어 있는 생성자 있다
- Random r = new Random(); -> default 생성자 일 수도 있고 아무 매개변수도 안받는 생성자 선언
사용 예시
package Day15;
class A{
int a;
void print() {
System.out.println("a 는 " + a + " 입니다.");
}
}
public class ClassTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a1 = new A();
a1.a = 10;
a1.print();
A a2 = new A();
a2.a = 20;
a2.print();
A a3 = a1; // a3 = a1 을 미러링 한다는 개념으로 생각한다.
a3.a = 30;
a1.print(); // a3 값을 변화를 줘도, a1 값에 반영된다.
}
}
출력 결과
a 는 10 입니다.
a 는 20 입니다.
a 는 30 입니다.
Call by Reference 방식으로 생각하면 된다.
A a3 = a1 이라고 선언한다면 a3 값을 변화를 줘도, a1 값이 변한다.
이를 얕은 복사라고 한다.
'Java > Chapter' 카테고리의 다른 글
Java Chapter.15 - 접근 제한자 (0) | 2023.04.10 |
---|---|
Java Chapter.12 - HAS 관계 (0) | 2023.04.04 |
Java Chapter.9 - 매개변수(파라미터) - Call by Value, reference (0) | 2023.03.30 |
Java Chapter.8 - 메소드 (함수) (0) | 2023.03.28 |
Java Chapter.7.2 - 다차원 배열 (0) | 2023.03.23 |