Ch03: Introduction to Classes, Objects, Methods and Strings

Account Class with an Instance Variable, a set Method and a get Method

public class Account {
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}

클래스 선언

  • public 으로 선언된 클래스의 이름은 파일 이름과 같아야 한다.
  • 접근 지정자 public 은 어디서든지 접근 가능하도록 한다.

인스턴스 변수

  • 클래스의 객체는 각각의 클래스의 인스턴스 변수의 복사본을 가진다.
  • 접근 지정자 private 로 선언된 변수나 메소드는 오직 선언된 클래스의 메소드를 통해 접근 가능하다.
  • 보통, 클래스의 바디에 인스턴스 변수를 가장 먼저 적는 것을 선호하지만 사실 메소드 선언 밖이라면 어디서든지 적을 수 있다.

클래스 Account의 setName 메소드

  • 접근 지정자가 public 이다. 즉 이 메소드는 어디서든지 접근 가능하다.
  • 메소드 이름은 관습적으로, 소문자로 시작해 단어마다 대문자로 시작한다.

매개 변수는 지역 변수

  • 지역 변수는 특정 메소드의 바디에 선언된 변수들이다.
  • 자동으로 초기화되지 않는다.
  • 메소드가 종료되면, 지역 변수의 값들은 제거된다.

setName 메소드 바디

  • this 키워드가 객체 변수를 명시적으로 언급하기 위해 사용되었다.

클래스 Account의 getName 메소드

  • 메소드 이름 이후의 빈 괄호는, 일을 수행하기 위해 추가적인 정보가 필요없다는 것이다.
    • void 키워드를 사용하면 안된다.

드라이버 클래스 AccountTest

  • 다른 클래스의 객체를 형성하고, 그 객체의 메소드를 호출하는 클래스이다.
import java.util.Scanner;

public class AccountTest {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		Account myAccount = new Account();
		
		System.out.printf("Initial name is: %s%n%n", myAccount.getName());
		System.out.println("Please enter the name:");
		String theName = input.nextLine();
		myAccount.setName(theName);
		System.out.println();

		System.out.printf("Name in object myAccount is: %n%s%n", myAccount.getName());
	}
}

Account Class with an Instance Variable, a set Method and a get Method(Cont.)

Class Account는 어플리케이션이 아니다

  • main 을 포함하지 않기 때문이다.
  • 즉, Account 를 실행할 수 없다.

드라이버 클래스 AccountTest

  • 새로운 클래스를 시험하기 위해 main 메소드를 가지는 분리된 클래스이다.

객체의 인스턴스화-키워드 new와 생성자

  • 클래스 인스턴스 형성은 키워드 new 로 시작하고 객체가 형성된다.
  • 생성자는 메소드와 비슷하지만, 암묵적으로 객체가 형성된 순간 객체의 인스턴스 변수를 초기화하기 위한 새로운 연산자로 취급된다.

null-String 변수의 기본 초기값

  • 지역 변수는 자동으로 초기화되지 않는다.
  • 모든 인스턴스 변수는 기본 초기값을 가진다.
    • 인스턴스 변수의 초기값이 없으면, 자바가 제공하는 값이다.
  • String 형 인스턴스 변수의 기본 초기값은 null 이다.

Compiling and Executing an App with Multiple Classes

어떤 클래스도 main 메소드를 가질 수 있다

  • JVM은 어플리케이션 실행을 위해 오직 클래스의 main 메소드만을 호출한다.

Account UML class diagram

  • - 는 private, +는 public과 상응한다.

static 메소드 main

  • mainstatic 을 붙여 JVM이 main 메소드가 어디있는지 찾아 실행한다.
  • static 덕분에 처음에 main 메소드가 선언된 클래스의 객체를 만들 필요 없이 main 메소드를 실행할 수 있다.

Additional Notes on Class AccountTest

import 선언에 대한 메모

  • 대부분의 클래스는 명시적으로 import 되어야 한다.
  • 암묵적으로 import 되는 클래스들은,
    • SystemString 같은 java.lang 패키지의 클래스이다.
    • 같은 디렉토리에 존재하는 클래스들이다. 이들은 같은 기본 패키지로 고려된다.
  • 클래스 이름을 패키지 이름까지 항상 모두 적으면, import 선언이 필요없다.
java.util.Scanner input = new java.util.Scanner(System.in);

Software Engineering with private instance Variables and public set and get Methods

자료 은닉 또는 정보 은닉

  • private 키워드를 통해 인스턴스 변수를 객체 안에 숨기고, 오직 그 객체의 메소드를 통해서만 접근이 가능하도록 하는 것이다.

Account Class: Initializing Objects with Constructors

public class Account {
	private String name;

	// 반환형이 없다.
	public Account(String name) {
		this.name = name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}
public class AccountTest {
	public static void main(String[] args) {
		Account account1 = new Account("Jane Green");
		Account account2 = new Account("John Blue");
		
		System.out.printf("account1 name is %s%n", account1.getName());
		System.out.printf("account2 name is %s%n", account2.getName());
		}
}
		

생성자는 반환형이 없다

  • 생성자는 매개 변수는 가질 수 있지만, 반환형은 가질 수 없다.

기본 생성자

  • 만약 클래스가 기본 생성자를 정의하지 않는다면, 컴파일러는 매개 변수가 없는 기본 생성자를 제공한다.
  • 클래스의 인스턴스 변수를 기본값으로 초기화하기 위함이다.

생성자를 정의한 클래스는 기본 생성자가 없다

  • 만약 클래스에 생성자를 정의하면, 컴파일러는 기본 생성자를 형성하지 않는다.

Primitive Types vs. Reference Types

원시 자료형

  • boolean, byte, char, short, int, long, float, dobule 이 있다.
  • 원시 자료형 변수는 한 번에 선언된 종류의 한 가지 값만 가질 수 있다.
  • 원시 자료형 인스턴스 변수는 기본값으로 초기화 된다.
    • booleanfalse
    • byte, char, short, int, long, float, dobule0

참조 자료형

  • 원시 자료형이 아닌 자료형, 즉, 클래스 형이다.
  • 참조 자료형 변수는 컴퓨터 메모리 상의 객체의 위치, 즉 참조값을 저장한다.
  • 참조 자료형 인스턴스 변수는 "아무것도 아닌 것을 참조한다."는 뜻의 null 기본값으로 초기화 된다.

다른 클래스의 객체를 사용할 때,

  • 객체의 참조는 객체의 메소드를 통하도록 요구된다.
  • 객체에게 메시지를 보낸다는 것으로 알려져있다.

참고: Call-by-value와 Call-by-reference 차이점

Call-by-value

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성됨. 함수가 종료되면 해당 공간은 사라짐.
  • call-by-value 호출 방식은 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달.
  • 복사된 인자는 함수 안에서 지역적으로 사용되는 지역 변수의 특성을 가짐.
  • 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않음.
  • 자바의 경우 메소드에 전달되는 인자의 데이터 타입에 따라서 함수 호출 방식이 달라짐.
    • 원시 자료형 : call-by-value로 동작 .
    • 참조 자료형: call-by-reference로 동작 .

Call-by-reference

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성됨. 함수가 종료되면 해당 공간은 사라짐.
  • call-by-reference 호출 방식은 함수 호출시 인자로 전달되는 변수의 참조값을 전달. (해당 변수를 가르킨다.)
  • 따라서 함수 안에서 인자의 값이 변경되면, 인자로 전달된 객체의 값도 함께 변경됨.

좋은 웹페이지 즐겨찾기