Class

JK·2022년 12월 20일
0

JAVA

목록 보기
9/28
post-thumbnail

클래스 – 객체지향 프로그램의 기본 코딩방법

1. 클래스 제작

public class ExClass { // 반드시 대문자로 시작. 알파벳,숫자,_
	private 자료형 인스턴스변수( = 속성 = 필드)명;
	public ExClass(){ 	}
	public return_type method(){
	}
 }
  1. 패키지명
  2. 클래스명
  3. 데이터(인스턴스 변수=멤버변수, 필드) : 생성자나 setter를 이용하여 초기화하지 않으면 null 또는 0, boolean은 false로 초기화된다.
  4. 생성자함수 : 클래스명과 똑같이 리턴타입이 없는 메소드를 생성자라 하며 처음 객체를 만들 때       호출된다.
    .       모든 클래스는 반드시 하나 이상의 생성자가 있어야 한다(default 생성자 포함)
  5. 메소드
  6. Getter&Setter

2. 생성자

  • 생성자는 매개변수 없는 생성자와 매개변수 있는 생성자가 있다
  • 생성자가 없을 시에는 default 생성자가 자동 생성(하나라도 있으면 자동생성x)

3. 예제

Square


1. Square class

  • 속성, 생성자, 메소드, getter&setter(외부에서 가져오지 않으면 사용x)
  • 가로, 세로 변수 생성 (정사각형이므로 side 1개)
  • 넓이를 구하는 메소드 area() 생성
  • getter&setter 생성
public class Square {
	private int side; // side 라는 가로세로 변수 생성

	public Square() { // 매개 변수 없는 Square 함수 생성
		System.out.println("매개변수 없는 생성자 함수 호출");
	} // 생성자 함수 : return type 없고 클래스명과 같은 함수

	public Square(int side) { // 매개변수가 있는 생성자 함수 용도 : 데이터의 초기화
		this.side = side;
		System.out.println("매개변수 있는 생성자 함수 호출");
	}

	public int area() { // 넓이를 구하는 area 생성
		return side * side;
	}
	public int getSide() {
		return side;
	}

	public void setSide(int side) {
		this.side = side;
	}
}

2. SauareMain class

  • Square s = new square(); s라는 새로운 square 생성, s의side는 0으로 초기화
  • Square s1 = new square(2); // s의side를 2으로 초기화하면서 객체 생성
  • Square s2 = new square(10); // s의side를 10으로 초기화하면서 객체 생성
public class SquareMain {
	public static void main(String[] args) {
		Square s1 = new Square();  //s1이라는 새로운 Square 생성
		System.out.println("s1의 한 변은" + s1.getSide());
		s1.setSide(2);    
		System.out.println("수정된 s1의 넓이는 : "+s1.area());
		Square s2 = new Square(10);
		System.out.println("s2의 한 변은 " + s2.getSide());
		System.out.println("s2의 넓이는 " + s2.area());
	}
}
  • 결과
매개변수 없는 생성자 함수 호출
s1의 한 변은0
수정된 s1의 넓이는 : 4
매개변수 있는 생성자 함수 호출
s2의 한 변은 10
s2의 넓이는 100

Human

  • Kid, Man, Woman class를 만들고 HumanMain class에 출력
  • 다른 패키지에 있는 세 클래스를 import하여 main 클래스에서 사용
  • 레퍼런스 변수 선언

1. Kid

package com.lec.ex2_human.kid;

public class Kid {
	private String name;

	public Kid(String name) {
		this.name = name;
		System.out.println("Kid name 초기화하는 생성자 함수");
	}
}

2. Man

package com.lec.ex2_human;

public class Man {
	private String name;
	private int age;
	private int height;
	private double weight;
	// 개발자가 생성자 함수를 만들면 컴파일러는 디폴트 생성자 함수를 만들지 않는다
	// 따라서 생성자 함수를 만들고 디폴트 생성자 함수가 필요하면 만들어야 한다
	public Man() {
		System.out.println("매개변수 없는 생성자 함수");
	}
	public Man(String name, int age, int height, double weight) {
		this.setName(name);
		this.setAge(age);
		this.height = height;
		this.weight = weight;
		System.out.println("데이터 4개 초기화하는 생성자 함수");
	}
	public Man(String name) {
		System.out.println("이름 초기화하는 생성자 함수");
	}
	public Man(int height) {
		this.height = height;
	}
	public Man(double weight) {
		this.weight = weight;
	}
	public double calculateBMI() {//객체안에 height와 weight로 BMI 지수 return
		double result = weight / ( (height*0.01) * (weight*0.01) );
		return result;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
}

3. Woman

package com.lec.ex2_human;

public class Woman {
	public Woman() {
		System.out.println("매개변수 없는 Woman 생성자 함수");
	}
}

4. HumanMain

package com.lec.ex2_humanMain;

import com.lec.ex2_human.Man;
import com.lec.ex2_human.Woman;
import com.lec.ex2_human.kid.Kid;  

public class HumanMain {
	public static void main(String[] args) {
		Woman woman1 = new Woman();
		Woman woman2 = new Woman();
//		---------------------------
		//레퍼런스 변수 선언 = 객체생성(인스턴스 생성)
		System.out.println("woman1과 woman2가 같은지" + (woman1 == woman2));
		System.out.println("woman1과 woman2가 같은지" + woman1.equals(woman2));
		//객체끼리 비교시 equals 사용
		Kid kid = new Kid("홍아기");
		Man hong = new Man("홍길동");
		Man kim = new Man("김길동", 22, 170, 67);
		Man kim2 = kim;
		
		kim2.setHeight(185);
		kim2.setWeight(300);
		System.out.println("kim과 kim2가 같은 객체인지 " + kim.equals(kim2));
		double bmi = kim.calculateBMI();
		System.out.println(kim2.getName()+"의 bmi지수는" + bmi);
	}
}
  • 결과
매개변수 없는 Woman 생성자 함수
매개변수 없는 Woman 생성자 함수
woman1과 woman2가 같은지false
woman1과 woman2가 같은지false
Kid name 초기화하는 생성자 함수
이름 초기화하는 생성자 함수
데이터 4개 초기화하는 생성자 함수
kim과 kim2가 같은 객체인지 true
김길동의 bmi지수는54.05405405405405

Acount

계좌 개설, 예금, 출금, 잔액 기능이 있는 프로그램 만들기

1. Acount class

  • accountNo(계좌번호), ownerName(이름), balance(잔액)
  • 매개변수 없는 생성자, 잔액 없는 생성자, 셋 다 있는 생성자
  • 예금 기능, 출금 기능(잔액 없을 경우도 설정), 잔액 확인
public class Account {
	private String accountNo;
	private String ownerName;
	private long balance;
	public Account() {}
	public Account(String accountNo, String ownerName) {
		this.accountNo = accountNo;
		this.ownerName = ownerName;
		System.out.println(ownerName + "님 계좌 개설 감사합니다. 잔액 : "+ balance);
	}
	public Account(String accountNo, String ownerName, long balance) {
		this.accountNo = accountNo;
		this.ownerName = ownerName;
		this.balance = balance;
		System.out.println(ownerName+"님 계좌 개설 감사합니다. 잔액 : "+balance);
	}
	public void deposite(long money) {//예금하기
		balance += money;
		System.out.println(money+"원 예금하여 잔액 : "+balance);
	}
	public void withdraw(long money) {//잔액이 있을 경우에만 인출되게 하기
		if(balance>=money) {
			balance -= money;
			System.out.println(money+"원 인출하여 잔액 :" + balance);
		}else {
			System.out.println("잔액이 부족하여 인출 불가합니다");
		}
	}
	public void infoPrint() {
		// "110-333-5555" 홍길동님 잔액 : 10원 출력
//		System.out.println("\""+accountNo+"\" "+ ownerName +"님 잔액 :" + balance + "원" );
		System.out.printf("\" %s \"%s님 잔액 : %d원\n", accountNo, ownerName, balance);
	}
	//setter : name      계좌번호, 잔액은 변경할 수 없게  이름은 변경 가능하게
	//getter 
	public String getOwnerName() {
		return ownerName;
	}
	public void setOwnerName(String ownerName) {
		this.ownerName = ownerName;
	}
	public String getAccountNo() {
		return accountNo;
	}
	public long getBalance() {
		return balance;
	}
	public String infoString() {
		//return "\""+accountNo+"\" "+ ownerName +"님 잔액 :" + balance + "원";
		return String.format("\" %s \"%s님 잔액 : %d원\n", accountNo, ownerName, balance);
	}
}

2. AcountMain

package com.lec.ex3_account;

public class AccountMain {
	public static void main(String[] args) {
		Account hong = new Account("110-1", "홍길동", 10000);
		hong.infoPrint();
//		System.out.println(hong.infoString());
		Account hong1 = new Account("110-2", "홍길순");
		hong1.infoPrint();
		Account hong2 = new Account();
		System.out.println(hong2.infoString());
		hong.withdraw(5000);
		hong.deposite(500);
		hong1.deposite(2200000000L);
		hong1.withdraw(2200000000L);
 	}
}
  • 결과
홍길동님 계좌 개설 감사합니다. 잔액 : 10000
" 110-1 "홍길동님 잔액 : 10000원
홍길순님 계좌 개설 감사합니다. 잔액 : 0
" 110-2 "홍길순님 잔액 : 0원
" null "null님 잔액 : 0원       //입력을 안 하면 null로 초기화

5000원 인출하여 잔액 :5000
500원 예금하여 잔액 : 5500
2200000000원 예금하여 잔액 : 2200000000
2200000000원 인출하여 잔액 :0
profile
씨앗 개발자

0개의 댓글