
코드 재사용성
코드 관리 용이
중복 코드 제거
우선 프로그램을 기능적으로 완성 한 다음 어떻게 객체지향적으로 코드를 개선할 수 있을지 고민하는 것이 중요!
객체를 정의 해놓은 것
객체의 설계도
객체의 모든 속성(멤버변수)과 기능(메서드)이 정의되어 있음
클래스명 변수명; // 클래스 객체를 참조하기 위한 참조 변수 선언
변수명 = new 클래스명() // 객체 생성 후 , 객체의 주소를 참조 변수에 저장
Tv t;
t = new Tv();
// new로 인해 TV클래스의 인스턴스가 메모리의 빈 공간에 생성
실제로 존재하는 것
클래스에 정의된 내용대로 메모리에 생성 된 것
속성 과 기능의 집합
클래스로 부터 객체를 만드는 과정 -> 클래스의 인스턴스화
만들어진 객체 -> 인스턴스
소스 파일의 이름은 public class의 이름과 일치해야한다.
public class가 없다면 소스파일의 이름은 소스파일 내 어떤 클래스 이름으로든 가능!
하나의 소스파일에 둘 이상의 public class 존재 하면 안된다!
Tv tv1, tv2, tv3;
-> Tv[] tvArr = new Tv[3];
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
== Tv[] tvArr = {new Tv(), new Tv(), new Tv()}
객체 배열에는 객체가 저장되는 것 X, 주소가 저장
따라서 객체 배열 생성 후 객체를 각각 생성하여 저장해 주어야 함!
class Variable
{
int iv; // instance 변수
static int cv; // class 변수(static or 공유 변수)
void method()
{
int lv = 0; //지역 변수
}
}
인스턴스 변수 -> 객체마다 고유한 상태를 유지해야되는 경우 선언
클래스 변수 -> 독립적 저장공간X, 모든 인스턴스가 공통된 저장공간 공유
클래스이름.클래스 변수 와 같은 형식 가능
지역 변수 -> 메서드 및 반복문, 생성자 내에서만 사용되는 변수
메서드 수행에 필요한 메모리가 제공되는 공간

현재 실행중인 메서드아래에 있는 메서드 == 바로 위의 메서드를 호출한 메서드
메호힙
메소드 영역(Method Area) :
클래스 정보와 클래스 변수가 저장되는 곳
호출 스택(Call Stack) :
메소드의 작업공간. 메소드가 호출되면 호출 스택에 메모리 할당, 종료되면 사용하던 메모리를 반환함
힙(Heap) :
인스턴스가 생성되는 공간. new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성됨
기본형 매개변수(기본값) : 변수의 값을 읽기만 할 수 있다.
참조형 매개변수(주소) : 변수의 값을 읽고 변경할 수 있다.
class data1
{
int x;
}
class data
{
public static void main(String[] args)
{
data1 d = new data1();
d.x = 10;
System.out.println("main() :x =" +d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main() :x = " + d.x);
}
static void change(int x)
{
x = 1000;
System.out.println("change() : x =" +x);
}
}
main() :x =10
change() : x =1000
After change(d.x)
main() :x = 10
d.x의 값이 변경 된 것이 아니라 change 메서드의 매개변수 x의 값이 변경 된 것!!!!
-> 즉 원본에 영향 X
class data1
{
int x;
}
class data
{
public static void main(String[] args)
{
data1 d = new data1();
d.x = 10;
System.out.println("main() :x =" +d.x);
change(d);
System.out.println("After change(d.x)");
System.out.println("main() :x = " + d.x);
}
static void change(data1 d)
{
d.x = 1000;
System.out.println("change() : x =" +x);
}
}
main() :x =10
change() : x =1000
After change(d.x)
main() :x = 1000

반환타입이 참조형이라는 것은 메서드가 객체의 주소를 반환한다는것을 의미
class data1
{
int x;
}
class data
{
public static void main(String[] args)
{
data1 d = new data1();
d.x = 10;
data1 d2 = copy(d);
System.out.println("d.x="+d.x);
System.out.println("d2.x="+d2.x);
}
// 리턴값이 data객체의 주소 이므로 반환 타입이 data
static data1 copy(data1 d)
{
data1 tmp = new data1();
tmp.x = d.x;
return tmp;
}
}