JAVA

[Java] Class

sagesse2021 2021. 10. 28. 17:15
반응형
/*
 * 동물(Animal)에 해당하는 Animal 클래스 정의
 * 1. 분석
 *    - 속성 : 이름(name, 문자열), 나이(age, 정수)
 *    - 기능 : 짖다(cry())
 */
/*
 * 2. 설계 - 클래스 정의
 * < 클래스 정의 기본 문법 >
 * [접근제한자] class 클래스명 {
 * 		// 멤버변수
 * 		// 생성자
 * 		// 메서드
 * }
 */
//Animal클래스 정의

public class Animal {
	//멤버변수 선언
	String name;
	int age;
	
	//메서드 정의
	// 짖다(cry()) : 매개변수도 없고, 리턴값도 없는 메서드
	// => "동물 울음 소리!" 문자열 출력
	public void cry() {
		System.out.println("동물 울음소리!");
	}
}
/*
 * 자동차 클래스 정의
 * 1. 구성요소(속성) - 멤버변수
 *    1) 제조사(company, 문자열)
 *    2) 모델명(modelName, 문자열)
 *    3) 배기량(cc, 정수)
 * 2. 동작(기능) - 메서드
 *    1) 속력증가(speedUp()) - "자동차 속력 증가!" 출력
 *    2) 속력감소(speedDown()) - "자동차 속력 감소!" 출력
 */
public class Car {
	// 멤버변수 선언
	String company;
	String modelName;
	int cc;
	
	// 메서드 정의
	public void speedUp() {
		System.out.println("자동차 속력 증가!");
	}

	public void speedDown() {
		System.out.println("자동차 속력 감소!");
	}
	
}
public class Ex {

	// main() 메서드는 자바 프로그램의 시작점이다!
	// => main() 메서드에서부터 객체를 생성하고 사용할 수 있다!
	// 단, main() 메서드에서만 가능한 것은 아니고
	// main() 메서드가 호출하는 다른 메서드에서도 사용 가능
	public static void main(String[] args) {
		/*
		 * 정의한 클래스는 설계도에 해당하므로 실제 사용을 위해서는 반드시 실체(= 객체)를 생성해야한다! => 클래스를 사용하여 메모리에 생성된
		 * 객체를 인스턴스(Instance)라고 함
		 * 
		 * < 클래스에 대한 인스턴스 생성 기본 문법 > 클래스명 변수명 = new 클래스명();
		 * 
		 * < 인스턴스 접근 기본 문법(멤버변수 접근 및 메서드 호출) > 참조변수명.멤버변수 또는 참조변수명.메서드()
		 */

		// Animal 클래스의 인스턴스 생성 과정
		// 1. Animal 클래스 타입 참조변수 선언
//		Animal ani;

		// 2. Animal 클래스 인스턴스 생성 및 주소값 저장
//		ani = new Animal();

		// 위의 두 문장을 한 문장으로 결합
		Animal ani = new Animal();

		// Animal 인스턴스에 접근하여 멤버변수 사용 및 메서드 호출
		// => 인스턴스 접근을 위해서는 반드시 인스턴스 주소가 필요하며,
		// 인스턴스 주소를 담고 있는 참조변수(ani)를 통해 접근이 가능함
		// 1. Animal 인스턴스의 멤버변수 name 과 age 에 값 저장
//		name = "멍멍이"; // 컴파일 에러 발생! 존재하지 않는 변수이므로 사용 불가
		// => 반드시 참조변수명.멤버변수명 형태로 접근해야한다!
		ani.name = "멍멍이"; // ani 인스턴스의 멤버변수 name 에 "멍멍이" 저장
		System.out.println("이름 : " + ani.name);

		ani.age = 3;
		System.out.println("나이 : " + ani.age);

		// 2. Animal 인스턴스의 메서드 cry() 호출
		// => 리턴값이 없는 메서드이므로 메서드만 호출
		// => 매개변수가 없는 메서드이므로 소괄호() 안에 아무것도 명시하지 않음
		ani.cry();

		System.out.println("--------------------");

		// Animal 클래스의 두번째 인스턴스(ani2) 생성
		// => 멤버변수 초기화 - 이름 : 야옹이, 나이 : 2
		// => cry() 메서드 호출
		Animal ani2 = new Animal();
		ani2.name = "야옹이";
		ani2.age = 2;
		System.out.println("이름 : " + ani2.name);
		System.out.println("나이 : " + ani2.age);
		ani2.cry();

		// ---------------------------------------------------
		// 위의 두 인스턴스(ani, ani2) 구조
		// ---------------------------------------------------
		// new
		// Animal 클래스 => 인스턴스1(ani) 인스턴스2(ani2)
		// 이름(name) "멍멍이" "야옹이"
		// 나이(age) 3 2
		// ---------------------------------------------------

		System.out.println("========================================");
		// Car 클래스의 인스턴스(car) 생성 및 멤버변수 초기화 후 출력
		// 제조사 : 현대
		// 모델명 : 그랜져
		// 배기량 : 3000
		Car car = new Car();
		// => Heap 공간에 생성된 인스턴스 주소가 참조변수 car 에 저장
		car.company = "현대";
		car.modelName = "그랜져";
		car.cc = 3000;
		System.out.println("제조사 : " + car.company);
		System.out.println("모델명 : " + car.modelName);
		System.out.println("배기량 : " + car.cc);

		// speedUp(), speedDown() 메서드 호출
		car.speedUp();
		car.speedDown();
		
		System.out.println("===========================");
		
		// Student 클래스 인스턴스 생성
		// - 이름 : "홍길동", 번호 : 1, 과정명 : "프레임워크기반자바개발자"
		// - study() 메서드를 호출하여 "JAVA" 문자열 전달
		//   rest() 메서드 호출
		Student s1 = new Student();
		s1.name = "홍길동";
		s1.id = 1;
		s1.className = "프레임워크기반자바개발자";
		System.out.println("이름 : " + s1.name);
		System.out.println("번호 : " + s1.id);
		System.out.println("과정명 : " + s1.className);
		
		System.out.println("-----------");
		// Student 클래스 인스턴스2 생성
		// 자신의 이름, 번호, 과정명 저장 후 출력, 메서드 호출
		Student s2 = new Student();
		s2.name = "이순신";
		s2.id = 2;
		s2.className = "웹기반안드로이드개발자";
		System.out.println("이름 : " + s2.name);
		System.out.println("번호 : " + s2.id);
		System.out.println("과정명 : " + s2.className);

	} // main() 메서드 끝

} // Ex 클래스 끝

// 하나의 java 파일 내에 여러개의 클래스를 정의할 수 있다!
// => 단! 파일명과 동일한 이름의 클래스 외에는 public 키워드를 붙일 수 없다!
// 학생(Student) 클래스 정의
// 속성 : 이름(name, 문자열), 번호(id, 정수), 과정명(className, 문자열)
// 메서드
// 1) 공부(study()) - 리턴값 없음, 매개변수 - 과목명(subjectName, 문자열)
//                    => "XXX 과목 공부!" 출력
// 2) 휴식(rest()) - 리턴값 없음, 매개변수 없음 => "휴식!" 출력
class Student {
	// 멤버변수 선언
	String name;
	int id;
	String className;
	
	// 메서드 정의
	public void study(String subjectName) {
		// 전달받은 파라미터 값을 사용하여 출력
		System.out.println(subjectName + " 과목 공부!");
	}
	
	public void rest() {
		System.out.println("휴식!");
	}
	
}
/*
이름 : 멍멍이
나이 : 3
동물 울음소리!
-------------------------------
이름 : 야옹이
나이 : 2
동물 울음소리!
-------------------------------
제조사 : 현대
모델명 : 그랜저
배기량 : 3000
자동차 속력 증가!
자동차 속력 감소!
-------------------------------
이름 : 홍길동
번호 : 1
과정명 : 프레임워크 자바 기반 개발자
JAVA 과목 공부!
휴식!
-------------------------------
이름 : 이순신
번호 : 2
과정명 : 웹기반 안드로이드 개발자
CSS 과목 공부!
휴식!
*/
public class Test {

	public static void main(String[] args) {
		/*
		 * Account 인스턴스(acc) 생성 후 다음과 같이 초기화 및 출력
		 * ---------------------------------------
		 * 계좌번호 : 111-1111-111
		 * 예금주명 : 홍길동
		 * 현재잔고 : 10000원
		 */
		Account acc = new Account();
		acc.accountNo = "111-1111-111";
		acc.ownerName="홍길동";
		acc.balance = 10000;
		
		System.out.println("계좌번호 : " + acc.accountNo);
		System.out.println("예금주명 : " + acc.ownerName);
		System.out.println("현재잔고 : " + acc.balance + "원");
		
		System.out.println("---------------------------------");
		
		Account acc2 = new Account();
		acc2.accountNo="123-4567-891";
		acc2.ownerName="김철수";
		acc2.balance= 5000;
		
		System.out.println("계좌번호 : " + acc2.accountNo);
		System.out.println("예금주명 : " + acc2.ownerName);
		System.out.println("현재잔고 : " + acc2.balance + "원");
		
		
	}// main() 메서드 끝

} // Test 클래스 끝

/*
* 은행계좌(Account) 클래스 정의
* 멤버변수 - 계좌번호(accountNo, 문자열) => "111-1111-111"
*            예금주명(ownerName, 문자열) => "홍길동"
*            현재잔고(balance, 정수)     => 10000
*/
class Account{
	
	String accountNo;
	String ownerName;
	int balance;
}
/*
계좌번호 : 111-1111-111
예금주명 : 홍길동
현재잔고 : 10000원
---------------------------------
계좌번호 : 123-4567-891
예금주명 : 김철수
현재잔고 : 5000원
*/
import java.awt.print.Printable;

public class Ex2 {

	public static void main(String[] args) {
		Person p1 = new Person();
		p1.name = "김춘추";
		p1.age = 27;
		p1.print();
		
		Person p2 = new Person();
		p2.name = "김유신";
		p2.age = 24;
		p2.print();
	}

}

//사람(Person) 클래스 정의
class Person{
	// 멤버변수 선언
	String name;
	int age;
	
	// 메서드 정의
	// 자신의 인스턴스에 저장된 이름, 나이를 출력하는 print() 메서드 정의
	// => 매개변수 없음, 리턴값 없음
	public void print() {
		// 클래스 내의 메서드에서 자신의 클래스 멤버변수에 자유롭게 접근 가능
		// => 즉, 변수명만으로 메모리에 생성된 자신의 인스턴스 내의
		//    멤버변수 값을 사용할 수 있다!
		//    => 단, 동일한 코드라 하더라도 인스턴스에 따라 저장된 값은 달라짐
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);

	}
	
}
public class Test2 {

	public static void main(String[] args) {
		
		Account2 acc2 =  new Account2();
		
		acc2.accountNo = "111-1111-111";
		acc2.ownerName = "홍길동";
		acc2.balance = 10000;
		
		acc2.showAccountInfo();
	}

}
/*
* 은행계좌(Account2) 클래스 정의
* 멤버변수 - 계좌번호(accountNo, 문자열) => "111-1111-111"
*            예금주명(ownerName, 문자열) => "홍길동"
*            현재잔고(balance, 정수)     => 10000
* 메서드
* - showAccountInfo() => 리턴값 없음, 매개변수 없음
*   => 계좌번호, 예금주명, 현재잔고를 출력하는 메서드 정의
*      ex) 계좌번호 : 111-1111-111
*          예금주명 : 홍길동
*          현재잔고 : 10000원
*/
class Account2{
	String accountNo;
	String ownerName;
	int balance;
	
	public void showAccountInfo() {
		System.out.println("계좌번호 : " + accountNo);
		System.out.println("예금주명 : " + ownerName);
		System.out.println("현재잔고 : " + balance);
	}
}
/*
계좌번호 : 111-1111-111
예금주명 : 홍길동
현재잔고 : 10000
*/

 

반응형

'JAVA' 카테고리의 다른 글

[Java] 접근제한자  (0) 2021.10.28
[Java] Class 연습  (0) 2021.10.28
[Java] 객체지향(Method)  (0) 2021.10.28
[Java] 배열 테스트 문제  (0) 2021.10.28
[Java] 배열(Array)  (0) 2021.10.26