JAVA

[JAVA] 객체와 클래스

jeong_rice 2024. 9. 4. 16:03

<aside> 💡 클래스 : 객체들의 모임 ( 붕어빵 틀 )

속성 : 객체가 가진 고유한 특성, 변수를 사용

행동 : 변수, 연산자, 제어문 사용

객체(Object) = 인스턴스(Instance) :속성과 기능(객체의 행동 패턴)이 묶인 프로그램 단위

속성 = 멤버 변수

기능 = 메소드

</aside>

class 클래스 명{ ... } //클래스 선언 방법
  • 속성 추가 : 변수
  • 행동 추가 : 메소드(method)
    • 메소드 형식 : int, double, void(아무런 값이 없을 경우)
    class BankAcount {//BankAcount클래스
    	int balance; //속성 추가 (현재 잔액)
    	void deposit(int n){//행동(입금)
    		balance += n;
    	}
    	void withdraw(int n){//행동(출금)
    		balance -= n;
    	}
    	int getBalance(int n){//행동(잔액조)
    		return balance;
    	}
    }
    
  • 객체지향 프로그래밍 : 상속, 다형성, 캡슐

메소드 호출 : 메소드(매개값1, 매개값2,,,);

int result = add(10,20);
//메소드 : add
//매개값 : (10,20)

객체

 물리적이나 개념적으로 식별 가능 한 것

객체를 만들기 위해서 new 연산자 사용

  • [예제] BankAccount 객체의 사용
    package BankAccount;
    
    //BankAccount클래스 생성
    class BankAccount{
    	int balance;
    	
    	void deposit(int n) {
    		balance += n;
    	}
    	
    	void withdraw(int n) {
    		balance -= n;
    	}
    	
    	int getBalance() {
    		return balance;
    	}
    }
    
    public class Test {
    	public static void main(String[] args) {
    		int money;
    		BankAccount b1,b2;
    		//은행 계좌 b1,b2 를 만든다
    		b1 = new BankAccount();
    		b2 = new BankAccount();
    		// b1에 100원 b2에 500원을 입금한다
    		b1.deposit(100);
    		b2.deposit(500);
    		//b1의 현 잔액을 조회하고 전액을 출금하여 b2에 입금
    		money = b1.getBalance();
    		b1.withdraw(money);		
    		b2.deposit(money);
    		//b1의 현 잔액 조사 화면에 출력
    		money = b1.getBalance();
    		System.out.println(money);
    		//b2의 현 잔액 조사 화면에 출력
    		money = b2.getBalance();
    		System.out.println(money);
    		
    	}
    
    }
    
    /*
    결과
    0
    600
    */
    
  • 두 은행 계좌를 만들고 각각 100원, 500원을 입금하고, 처음 계좌에서 예금 전액을 인출하여 2번째 계좌로 입금하는 기능을 한다. 정상적으로 프로그램이 되었다면 처음 계좌의 잔액은 0원 두번쨰 계좌의 잔액은 600원이 될 것이다
  • [예제] 책장(Bookshelf)이라는 객체의 사용
    package BankAccount;
    
    class BookShelf {
    	int count;
    	
    	void addBook(int n) {
    		count += n;
    	}
    	
    	void removeBook(int n) {
    		count -= n;
    	}
    	
    	int getCount() {
    		return count;
    	}
    }
    
    public class 책장 {
    	public static void main(String[] args) {
    		int Book;
    		BookShelf B1,B2;
    		
    		B1 = new BookShelf();
    		B2 = new BookShelf();
    		
    		B1.addBook(20);
    		B2.addBook(8);
    		
    		Book = B1.getCount();
    		B1.addBook(Book);
    		System.out.println(Book);
    		
    		Book = B2.getCount();
    		B2.addBook(Book);
    		System.out.println(Book);
    		
    		
    	}
    }
    
  • 책장(Bookshelf)이라는 클래스를 만들라. 이 클래스의 속성은 현재 꽂혀있는 책의 권수를 나타내는 count 라는 변수이며, 행동(메소드)으로는 n권의 책을 추가하는 addBook(int n) 과, n권의 책을 빼내는 removeBook(int n), 그리고 현재 꽂혀 있는 책의 권수를 나타내는 getCount() 등 세 가지가 있다. 각각의 메소드를 호출하여 사용하는 테스트 프로그램도 포함하여 프로그램을 만들라.
  • 객체간의 관계
    • 집합관계
    • 사용관계
    • 상속관계

메소드 오버로딩

  • 메소드명은 동일하지만 매개변수는 다름
  • [예제] 메소드 오버로딩 AccountBank
  • package feb_ten; class BankAccount{ int Balance; void deposit(int n) { Balance += n; } void deposit(double d) { Balance += (int)d; } void deposit() { Balance += 1000; } void withdraw(int n) { Balance -= n; } void withdraw(double b) { Balance -= b; } void withdraw() { Balance -= 1000; } int getBalance() { return Balance; } } public class 메소드오버로딩 { public static void main(String[] args) { BankAccount B1 = new BankAccount(); BankAccount B2 = new BankAccount(); B1.deposit(100); B1.deposit(100.0); B1.deposit(); int n = B1.getBalance(); System.out.println(n); B2.withdraw(500); B2.withdraw(500.0); B2.withdraw(); int n2 = B2.getBalance(); System.out.println(n2); } } /* 1200 -2000 */

생성자 메소드

  • 어떤 객체가 new연산자에 의해 생성될 때 자동으로 실행되는 메소드
  • 객체 초기화
  1. 생성자 메소드이름과 클래스 이름이 같아야 함
  2. 생성자 메소드는 아무런 값도 반환하지 않는다. return값이 없다
Class BankAccount{
	int Balance;

	BankAccount(int n){//생성자 메소드
		Balance = n;
	}
}

‘문자’ “문자열”