Java Basic: this연산자, 생성자

2 분 소요

  public String toString(){ 
	String result="가로:"+width+",세로:"+length+",높이:"+height;
	return result;
  }

System.out.println(box1); 객체참조변수를 출력문에 써주면 toString 메소드가 자동으로 동작한다.

만약 toString메소드가 없으면 그 객체의클래스 이름과 어디에 있는지 정보를 갖고 있는 주소값이 출력된다.

따라서 만약 그 클래스의 속성값을 문자열로 출력할 일이 있다면 String을 반환하는 toString을 만들어 준다.

에러

BankAccount 클래스 앞에 public을 추가하면 다음과 같은 오류가 발생한다.

BankAccountTest02.java:4: error: class BankAccount is public, should be declared in a file named BankAccount.java
public class BankAccount {

==>하나의 파일에 두개 이상의 클래스로 구성될 때에는 반드시 main이 있는 클래스이름으로 파일명을 저장해야 하며 그 클래스만이 public 이어야 한다.

class BankAccount {

	public static void main(String []args){
		System.out.println("BankAccount의 main입니다.");
	}
 
}

class BankAccountTest03 { //결과: 이 클래스 main만 동작한다

	public static void main(String []args){
		System.out.println("BankAccountTest03의 main입니다.");
	}
 
}

하나의 파일에 2개 이상의 클래스를 만들 때에는 파일이름과 동일한 클래스이름에 public을 붙이고 그 클래스에 있는 main메소드가 동작한다.

객체지향 프로그래밍

Object Oriented Programming –> 현실세계의 모든 것을 객체화 할 수 있다.

  • 객체: 이 세상에서 단 하나밖에 없는 유일한 것.
  • 클래스: 객체를 표현하기 위한 설계도(틀)

객체를 표현하기 위해서는 표현하고자 하는 객체에 대해서 속성(멤버변수)와 동작(멤버메소드)를 분석하여 클래스를 만들고 그 클래스의 객체를 생성하여 사용한다.

객체지향 프로그래밍의 특징 1.”은닉성” 외부의 다른 클래스로부터 속성(멤버변수)들을 보호한다. 접근명시자를 사용한다. 접근명시자의 종류는 private,public

외부로부터 보호할 속성에는 private 영역에 두고 private영역의 속성에 접근하는 메소드들을 public에 두어서 클래스를 만든다.

class Person{

	private String name;
	private int age;

}

p1.name = "홍길동"; p1.age =20; //에러 발생 ` person클래스의 private영역인 속성(멤버변수)에 직접 접근할 수 없다.

접근할 수 있는 메소드를 public에 만들어두고 사용해야 한다. 접근해서 값을 변경하는 메소드는 setxxx으로 만들고 접근해서 값을 읽어오는 메소드는 getxxx로 만든다.

이것을 setter,getter라고 부른다.

따라서, 클래스를 만들때 보통은 모든 멤버변수들은 private영역에 두고 그 private영역의 멤버변수에 접근하기 위한 setter,getter를 public에 모두 선언한다.

setter, getter

  • setter: 매개변수 O, 반환값 x
  • getter: 매개변수 X, 반환값 O

toString 메소드

현재 상품의 속성값을 문자열로 반환하는 메소드

public String toString(){	
	String result="";
	result+="상품명"+name+"\n";
	result+="수량"+count+"\n";
	result+="가격"+price+"\n";
	return result;
}

main메소드에서 System.out.println(객체이름); 으로 호출한다. System.out.println(g1);또는 System.out.println(g1.toString());

this 키워드

클래스를 만들때 생성자나 멤버메소드의 매개변수이름을 의미있는 이름을 정해주다 보면 멤버변수 이름과 동일하게 된다.

메소드안에서 멤버변수에 접근하기 위해서는 this.멤버변수명으로 접근할 수 있다.

class Person{
	private String name;
	private int age;
	
	public void setName(String name){
		this.name=name; //메소드안에서 멤버변수에 접근하기 위해서는 this키워드를 사용한다.
	}
}

생성자

클래스이름과 같은 이름의 특수한 메소드 다른 일반 메소드처럼 호출문에 의해서 동작하는게 아니라 객체생성시에 자동수행되어 객체 생성함과 동시에 멤버변수들의 값을 초기화 할 목적으로 사용한다.

생성자는 return의 개념이 없기 때문에 void라고 써서는 안된다. return type은 필요 x

class Person{
	private String name;
	private int age;

	public Person(){
		name="김유신";
		age = 20;
	}

보통 생성자도 만들고 setter들도 만든다.


생성자의 중복

생성자를 여러개 중복하여 정의하는 것 생성자를 중복하여 정의하기 위해서는 매개변수의 자료형이나 개수가 다르거나, 매개변수의 순서가 달라야한다.

class Emp{
	String name;
	int sal;
	String addr;
	
	public Emp(){
		...
	}
	public Emp(String name, int sal,String addr){
		...
	}	
}

위와 같이 생성자를 중복하여 정의할 수 있다.

Emp a = new Emp(); 라고 하면 A의 생성자가 동작한다.

Emp b = new Emp(“홍길동”,500,”서울”); 라고 하면 B의 생성자가 동작한다.

객체 생성시에 전달되는 값의 자료형과 개수에 따른 생성자가 자동으로 동작한다.