06-Object&Class



객체와 클래스


객체(Object)

  • 자바 언어의 특징은 객체 지향 프로그래밍이라는 점이다. 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 다른 것과 식별 가능 한 것을 의미. 객체는 일종의 ‘틀’을 구성하고, 이 틀을 중심으로 여러 개의 틀들과 객체를 생성한다고 생각하면 된다.
  • 객체는 속성동작으로 구분된다. 즉, 정적이냐 동적이냐? 이것은 각각 필드메소드이다.

객체 지향 프로그래밍의 특징은 캡슐화, 상속, 다형성


객체 생성

클래스 변수와 메소드 등을 복사하여 메모리(heap)에 저장

클래스 정의는 한 번만, 그리고 객체는 클래스로부터 생성한다.

//클래스 정의
클래스이름 변수이름 = new클래스이름();
//객체 생성
객체참조변수명.메소드명;


클래스(class)

클래스 정의

[] 선택 여부
[modifier] class 클래스명[extends][implements] {
  //변수
  //생성자
  //메소드
}


modifier

역할 modifier class var method 생성자
접근권한 public o o o o
  protected x o o o
  private x o o o
사용방법 static x o o x
  final o o o x
  abstract o x o x
기타     voalatile
transient
native
synch-
 
  • private
    • 사용 영역을 현재 클래스로 제한
  • no modifier(difalt)
    • 사용 영역을 현재 패키지로 제한
  • protected
    • 사용 영역을 현재 패키지 + 다른 패키지의 상속받은 클래스로 제한
  • public
    • 사용 영역이 무제한


package

class의 정의가 한 개의 파일 단위라면, 유사한 성격의 클래스를 모아놓은 폴더가 package이다.

  • 같은 패키지를 쓸 때는 별다른 표식이 없으나, 다른 패키지를 써야 할 때는 패키지를 import 해야한다.
  • import는 어디에 패키지가 있다는 것을 알려주는 것이다.

순서는 다음과 같다.

package
  
  import package
  
  class{
    
  }


private 사용과 getter setter 메소드

암호나 변경, 혹은 접근이 되어서는 안되는, 사용자 제외 바꿀 수 없는 객체를 만들어야 할 때 private을 사용한다.

외부에서 직접 접근이 불가능하게 하고, 공유하는 메소드는 public을 사용하여 메소드를 통해 접근 가능하도록 한다.

class Login{
  
String id;
Private String pw; // 변경불가
  
void setPw(String newpw){
 //pw=newpw;
} //setter 메소드

String getPw(){
return pw; //getter 메소드
}


매개변수

call by value

class MyObject{
	int a = 10;
	
}

class Call{
	void add(int i) {
		 
		System.out.println(i++);   
	}
	
	void addObject(MyObject mo) {// 참조형변수가 전달되고 있는 표
		System.out.println(mo.a++);
	}
}

public class CallByValueTest {

	public static void main(String[] args) {
		Call c = new Call();
		int j = 10;
		c.add(j);
		System.out.println("c.add(j) 호출 후의 j =" + j);
	    MyObject obj = new MyObject();
		c.addObject(obj);
		System.out.println("c.addObject(obj) 호출 후의 obj.a ="+ obj.a);
		

	}

}
  • 최초의 변수 i는 10이었는데 11로 변화, 반면 j는 변화가 없다.
    • 기본형 변수가 매개변수로 전달 시에는 메소드 i 변수로 j 변수값을 전달한 이후에 i변수값이 되어도 j는 변화가 없다.

참조형이 가져가는 것은 주소, mo.obj는 같은 번지를 참조한다. 참조형 변수 매개변수 전달시에는 주소값 복사 전달하고,

따라서 obj주소값을 mo 복사 전달하게 되며 obj, mo는 같은 객체를 참조하게 된다.

obj.a와 mo.a는 동일하다.

call by value : “값” 복사를 전달하는 것, 실제 값이 복사 전달되는가 주소값이 복사 전달 되는가의 문제