본문 바로가기
Programming/Java

[JAVA] 객체와 클래스

by 공부합시다홍아 2023. 11. 8.
 

[JAVA] 스택(Stack)과 큐(Queue)

[JAVA] 매서드 [JAVA] 2차원 배열 [JAVA] 배열을 이용한 문제풀이 [JAVA] 정렬과 복사 [JAVA] 배열 연습 [JAVA] 소수(Prime Number) 구하기 반복문을 이용한 별만들기 [JAVA] 제어문 제어문 조건문 / 반복문 / 탈출

hong-study.tistory.com


클래스 ( Class )
  • JAVA 에서 객체(Object)를 생성하기 위한 일종의 "설계도" 라고 생각하면 된다.

        >> 쉽게 생각하면, 볼펜을 생산할 때 볼펜 케이스가 있고, 내부에 잉크가 있다.

        >> 이때, 잉크를 '객체'로, 볼펜케이스를 '클래스'라고 생각하면 더 쉽다.

  • 객체가 가지는 속성(필드)와 동작(메서드)으로 이루어져 있다. ( 생략 혹은 하나 이상에서 동작 가능 )
  • Java를 실행 시 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드된다.
public class Object001_1 {

	int result;
	int add(int a) {
		result += a;
		return a;
	}

}

객체 ( Object )
  • 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서
  • 본인의 속성을 포함하고, 다른 것과 식별 가능한 것을 말한다.
public class Object001_2 {

	public static void main(String[] args) {
    
		System.out.println("1번 계산기");
		Object001_1 ca1 = new Object001_1();
		
		System.out.println(ca1.add(10));
	}
}

인스턴스 ( Instance )
  • 클래스가 볼펜 케이스라면, 그 틀을 통해 생성된 객체(잉크) 하나하나를 해당 클래스의 인스턴스라 한다.
  • 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성 가능하다. 
  • 즉, 인스터스란 현실의 객체를 소프트웨어 내에서 구현한 실체라고 생각하면 된다.

멤버변수 ( Member Variable )
  • 클래스 안에서 선언 된 변수
  • 객체를 생성할 때 각 데이터 타입의 기본 값으로 자동 초기화
  • 기본 값 : 정수형 0, 실수형 0.0, 논리형 false, 객체 null
지역변수 ( Local Variable )
  • 메서드 안에서 선언된 변수
  • 사용하기 전에 반드시 초기화 해야 함

< 클래스 생성 >

public class Variable {

		// 멤버변수는 객체로 생성될 때 자동 초기화
		// 강제 지정 가능
		int a;
		
		// 매개변수
		void printNum(int c) {
			
			// 지역변수
			int b = 100;
			
			System.out.println("멤버 변수 : " + a);
			System.out.println("지역 변수 : " + b);
			System.out.println("매개 변수 : " + c);
		}

}

< 객체 생성 및 출력 >

public class Variable__print {

	public static void main(String[] args) {
		
		Variable v = new Variable();
		
		v.a = 100;
		v.printNum(100);

	}

}

생성자 ( Constructor )
생성자는 객체가 생성될 때 객체의 상태(멤버변수)를 초기화하는데 사용한다.

객체가 생성될 때 new 키워드 다음에 오는 것을 생성자라고 한다. ( 객체 생성과는 다르다 )

메서드와 모양이 비슷하게 생겼지만, 반환 타입을 적지 않고 클래스 이름과 대/소문자까지 똑같이 만들어야 한다.

생성자는 반드시 클래스 안에 하나 이상 선언해야 하며, 만일 생성자를 만들지 않을 경우
자바 가상 머신(JVM: Java Virtual Machine)이 대신해서 기본 생성자를 자동으로 하나 만들어 준다.

기본 생성자는 매개 변수를 가지지 않는 기본 형태의 생성자이다.

  • 생성자 선언 규칙

    - 생성자의 이름은 클래스 이름과 대/소문자까지 정확히 같아야 합니다.
       ☞ 만약 클래스 이름과 다른 이름으로 만들면 메서드로 간주합니다.
    - 생성자는 메서드와는 달리 반환 유형을 적지 않습니다.
    - 생성자는 다른 유형으로 여러 개 생성 가능합니다 (생성자 오버로딩, 매개변수 종류나 개수가 달라야한다.) 

< 클래스 생성 > 

public class phone {
	
	String model;
	int price;
	String color;
	
	// 생성자
	// 중복으로 여러 개 생성 가능
	// 규칙 - 매개변수의 종류 or 매개변수 개수가 달라야함.
	phone(){
		System.out.println("생성자 호출");
		
		// 멤버변수를 초기화 하는 역할
		model = "삼성";
		price = 1000000;
		color = "black";
	}
	
	phone(String pColor){
		model = "애플";
		price = 1200000;
		color = pColor;
	}
	
	void info() {
		
		System.out.println("===휴대폰 정보===");
		System.out.println();
		
		System.out.println("모델 : " + model);
		System.out.println("가격 : " + price);
		System.out.println("색상 : " + color);
		
	}
}

< 생성자 호출 및 출력 >

public class phone_print {

	public static void main(String[] args) {
		
		phone ph = new phone();
		
		new phone();
		ph.info();

		phone black = new phone("black");
		black.info();
	}

}

예제 - 입출금 계산 프로그램

< class 생성 >

public class account {
	
	String name;
	String pw;
	int bal;
	
    // 예금자 정보 입력
	account(String sName, String sPw, int sBal){
		name = sName;	// 성명
		pw = sPw;		// 비밀번호
		bal = sBal;		// 잔액
	}
	
    // 입금
	void deposit(int a) {	
		bal += a;
		System.out.println(a + " 원이 입금되었습니다.");
		System.out.println("잔액은 " + bal + " 원입니다.");
	}
	
    // 출금
	void withDraw(int b) {	
		bal -= b;
		System.out.println(b + " 원이 출금되었습니다.");
		System.out.println("잔액은 " + bal + " 원입니다.");
	}
	
    // 잔액확인
	int getbalance() {
		System.out.println();
		return bal;
	}
	
	
}

< 생성자 및 객체 생성, 출력 >

public class account_print {

	public static void main(String[] args) {
		
		account ac = new account("홍길동", "1234", 3600 );
		
		ac.deposit(800);
		ac.withDraw(1900);
		
		int bal = ac.getbalance();
		System.out.println(ac.name + "님의 현재 잔액은 " + bal + " 원입니다.");

	}

}
728x90

'Programming > Java' 카테고리의 다른 글

[JAVA] 접근 제한자  (0) 2023.11.13
[JAVA] 패키지와 상속  (0) 2023.11.10
[JAVA] 스택(Stack)과 큐(Queue)  (0) 2023.11.07
[JAVA] 매서드  (0) 2023.11.06
[JAVA] 2차원 배열  (0) 2023.11.03