13일차 - 2023.1.11

문우림·2023년 1월 11일
0

Java

목록 보기
3/23

1. return(2)

return의 두 가지 의미

return + 값 : 메소드를 호출한 영역으로 값을 반환
return만 (값 ×) : 메소드의 종료

📌return 종료

2. 변수의 스코프(scope)

  • 스코프(scope) = 영역, 유효범위
  • 프로그램상에서 사용되는 변수들은 사용 가능한 범위
    변수가 선언된 블럭이 그 변수의 사용범위
  • 중괄호{}로 한 영역이 생성된다면 그 영역에 관한 스코프를 형성
    →각각 다른 메소드에서 같은 이름의 변수를 사용 가능.

3. 지역 변수

  • 함수안의 변수, 특정 메소드안에 있는 변수(같은 영역 내에서 동일한 이름의 변수를 선언할 수 없다.)
  • 지역 변수는 변수가 선언된 블록 내에서만 유효하며, 블록{ }나( )를 벗어나면 메모리에서 소멸됨.

4. 클래스와 인스턴스

붕어빵 틀 = 클래스 (컴파일.class)
붕어빵 = 객체 (클래스를 메모리에 올리기 위한 것)

📌클래스

클래스(class) = '객체를 정의하는 틀 또는 설계도'
➡ 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됨.

필드란...

  • 클래스 내부 멤버.
  • 어떠한 데이터를 저장하기 위한 역할.
  • 클래스 내부의 생성자메소드 밖에 정의.
  • 클래스 내부 멤버여서 멤버 변수(member variable), 클래스 내 전역에서 사용해서 전역 변수라고도 불린다.

클래스 변수

  • 인스턴스 변수에 static만 붙여준다.
  • 모든 인스턴스가 공통된 값을 공유하게 된다.
  • 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 사용.
  • 메모리에 딱 한번 올라감.

클래스 메소드

  • static키워드를 가지는 메소드(static method).
  • 인스턴스를 생성하지 않고도 바로 사용 가능.
  • 클래스 메소드 내부에서 인스턴스 변수를 사용할 수없다.

클래스의 메소드 예제

static int add(int x, int y) { return x + y; } // 클래스 메소드

public class Member02 {

    public static void main(String[] args) {

        System.out.println(Method.add(20, 30)); // 클래스 메소드의 호출

        Method myMethod = new Method();         // 인스턴스 생성

        System.out.println(myMethod.add());     // 인스턴스 메소드의 호출

    }

}

예제처럼 클래스 메소드는 인스턴스 변수를 사용하지 않고, 전달된 매개변수만으로 동작하는 메소드이다.

📌인스턴스(instance)

클래스의 "인스턴스화" = 클래스로부터 객체(object)를 선언하는 과정
➡ 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 됨.
➡ 선언된 해당 클래스 타입의 객체를 인스턴스라고 한다.

인스턴스 변수

  • 클래스 내에 선언된 변수.
  • 인스터스가 생선될 때 생성됨.
  • 인스턴스 별로 다른 값을 가질 수 있음.

인스턴스 메소드

  • 클래스 내에 정의된 메소드(함수)
  • static키워드를 가지지 않는 메소드(instance method).
  • 2개의 클래스를 참조해서 사용할 경우, 같은 파일에 클래스를 생성해야 됨.

예제

class Car {
    
    boolean door;                       // 인스턴스 변수
   
    void openDoor() {                   // 인스턴스 메소드
        door = true;
    }

    static void toggleDoor(boolean d) { // 클래스 메소드
        return !d;
    }

}

4-1. 참조형 데이터 타입

  • 참조형 데이터 타입의 이름은 클래스 이름을 준다.
  • 크기와 용도를 정해줘야 한다.
  • 크기 : 4byte 참조형은 무조건 4byte.(주소의 메모리 크기 32bit: 2^32)
  • 참조형 변수는 실제 값이 아닌 주소 값을 저장한다.

4-2. 객체 생성

  • 클래스(참조형 데이터 타입)도 메모리에 있어야 사용할 수 있으므로, new를 사용하여 객체를 만들고 메모리에 올린다.(함수도 메모리 안에 4byte로 올린다.)
  • BankAccount = 참조형 데이터 타입 (기본형 아닌 데이터 타입은 참조형)
  • BankAccount yoon; ➡ yoon이라는 이름의 방으로 메모리 잡음(생성자).

5. 은행 계좌 코드

5-1. 기본(입금, 출금, 잔액)

public class BankAccount {
	static int balance = 0; // 예금 잔액

	public static int deposit(int amount) { // 입금
		balance += amount;
		return balance;
	}

	public static int withdraw(int amount) { // 출금
		balance -= amount;
		return balance;
	}
	
	public static int checkMyBalance() { // 예금 조회
		System.out.println("잔액 : " + balance);
		return balance;
	}
	
	public static void main(String[] args) {
		deposit(10000);
		checkMyBalance();
		withdraw(3000);
		checkMyBalance();
	}

}

[결과]
잔액 : 10000
잔액 : 7000

5-2. 클래스별로 나누어진 코드

BankAccount 폴더 안에 (클래스)BankAccount.java, (클래스)BankAccountTest.java 만들고 작성한다.

public class BankAccount {

	static int balance = 0; // 예금 잔액

	public static int deposit(int amount) { // 입금
		balance += amount;
		return balance;
	}

	public static int withdraw(int amount) { // 출금
		balance -= amount;
		return balance;
	}

	public static int checkMyBalance() { // 예금 조회
		System.out.println("잔액 : " + balance);
		return balance;
	}

}
public class BankAccountTest {

	public static void main(String[] args) {
		BankAccount yoon; // 변수 선언 (데이터 타입 + 변수명)
		
		yoon = new BankAccount(); // 객체 생성

		yoon.deposit(5000);
		yoon.checkMyBalance();
		yoon.withdraw(1000);
		yoon.checkMyBalance();
	}

}

[결과]
잔액 : 5000
잔액 : 4000

0개의 댓글