MarmellataDev
Published 2023. 4. 3. 17:48
Java Chapter.11 - 클래스 Java/Chapter

클래스

 

먼저 배열의 단점

  1. 개수 제한 (자료 구조)
  2. 같은 자료형만 사용 가능.

이와 같기에 좀 더 포괄하는 개념의 클래스가 나오게 된다.

 

구조체 + 메소드(함수) = 클래스 // 속성 (데이터) + 기능(메소드)

구조체 : 여러 자료형 변수를 하나의 변수로 관리

 

예를 들자면

붕어빵틀(클래스) - 붕어빵 (객체)

자동차도면(클래스) - 자동차(객체)

 

클래스 장점

  1. 클래스만으로는 메모리에 올라가지 않음, 객체화를 진행 해야 메모리에 올라감 (자원 효율성)
  2. 재사용성이 좋아짐.

 

클래스의 객체 생성자

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 값이 변한다.

 

이를 얕은 복사라고 한다.

 

profile

MarmellataDev

@Marmellata

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!