public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; }
@ 객체의선언 public static void main(string args[]){ Person aperson; } Person 클래스의객체를가리킬수있는 aperson 라는 참조변수를생성 초기값으로 null 이라는기본값을가짐 aperson
public static void main(string args[]){ Person aperson; aperson = new Person(); } name age aperson Person(){ } getname(){ } new 키워드를만나면새로운객체생성 객체를위해메모리공간을할당 Person 클래스에정의된모든변수들과메소드를가짐
public static void main(string args[]){ Person aperson = new Person( 둘리,21); Person bperson = new Person( 또치,25); Person cperson = new Person( 희동이,23); } aperson bperson cperson name 둘리 age 21 Person(String s,int a){ } getname(){ } name 또치 age 25 Person(String s,int a){ } getname(){ } name 희동이 age 23 Person(String s,int a){ } getname(){ }
@ Garbage Person aperson; Person bperson; Code aperson = new Person( 둘리,21); bperson = aperson; bperson = new Person( 또치,25); aperson = bperson; //aperson 이가진 Person 객체쓰레기 aperson bperson aperson bperson aperson bperson aperson bperson Memory name = 둘리 age = 21 name = 둘리 age = 21 name = 또치 age = 25 name = 둘리 age = 21 name = 또치 age = 25
객체소멸 new에의해생성된객체메모리를자바가상기계에게되돌려주는행위 소멸된객체공간은가용메모리에포함 자바는객체삭제기능없음 개발자에게는매우다행스러운기능 가비지 C/C++ 에서는할당받은객체를개발자가프로그램내에서삭제해야함 가비지 자신에대한레퍼런스가없는객체 가비지켈렉션 자바가상기계의가비지컬렉터가자동으로가비지를수집하여반환
public class GarbageEx { public static void main(string[] args) { String a = new String("Good"); String b = new String("Bad"); String c = new String("Normal"); String d, e; a = null; d = c; c = null; } }
가비지컬렉션 자바에서는가비지자동회수 가용메모리공간으로확보 가비지컬렉터 (garbage collector) 에의해자동수행 개발자에의한강제가비지컬렉션 System 또는 Runtime 객체의 gc() 메소드호출 System.gc(); // 가비지컬렉션작동요청 자바가상기계에강력한가비지컬렉션을요청 그러나자바가상기계가가비지컬렉션시점을전적으로판단
@ 객체에대한참조에서동등 (==) 의의미 1. = = 연산자 두개의참조가같은객체를가리키는지검사 2. equals() 메소드 한객체의내용이다른객체의내용과같은지검사 Object라는클래스에이미만들어져있는메소드 특정클래스에서객체들을비교할수있도록 equals() 메소드를재정의할수있음
== 연산자와 equals() 메소드의예 String a = aaa ; String b = a; String c = new String( aaa ); a 주소값 : 1000 aaa System.out.println(a.equals(b)); System.out.println(a==b); b b=a 이므로같음 주소값 : 2000 System.out.println(a==c); System.out.println(a.equals(c)); c aaa
@ 변수선언 [public/private/proetcted] [static/final] 자료형변수명 ; @ 변수의종류 1. 객체변수 2. 클래스변수 (static) 3. 상수변수 (final) @ 메소드의종류 1. 객체메소드 2. 클래스메소드
눈은각사람마다있고공기는모든사람이소유 ( 공유 ) 한다 사람은모두각각눈을가지고태어난다. 세상에는이미공기가있으며태어난사람은모두공기를공유한다. 그리고공기역시각사람의것이다.
static 멤버와 non-static 멤버의차이 non-static 멤버 static 멤버 선언공간적특성시간적특성공유의특성 class Sample { int n; void g() {...} } 멤버는객체마다별도존재. - 인스턴스멤버라고부름. 객체생성시함께멤버생성됨 - 객체가생길때멤버도생성 - 객체생성후멤버사용가능 - 객체가사라지면멤버도사라짐 동일한클래스의객체들에의해공유되지않음. - 멤버는객체내에각각공간유지 class Sample { static int m; static void g() {...} } 멤버는클래스당하나생성 - 멤버는객체내부가아닌별도의공간에생성 - 클래스멤버라고부름 클래스로딩시에멤버생성 - 객체가생기기전에이미생성 - 객체가생기기전에도사용가능 - 객체가사라져도멤버는사라지지않음 - 멤버는프로그램이종료될때사라짐 동일한클래스의객체들에의해공유됨
BankAccout 클래스의속성정의 연도 : year 이름 : name 입금액 : : money 금리 : rate (static 필드 ) BankAccout 클래스의메소드정의 static 메소드 금리유효성검사 : 0.02 미만또는 0.12초과일경우, : 금리확인메시지출력 stactic 필드와 satatic 메소드접근 static 필드의값변화살펴보기
A. call-by-value : 기본자료형전달할때 실매개변수의값을형식매개변수에복사 형식매개변수의값이변화 -> 실매개변수값변화되지않음
B. call-by-reference : 참조자료형을전달할때 실매개변수 ( 객체 ) 의주소를형식매개변수에전달 형식매개변수가실제매개변수의또다른별명이됨.
인자로배열을전달하면배열의레퍼런스만이전달됨 2 3 4 5 6