
■클래스
- 객체를 정의하는 기본 형식
■객체
- 클래스 메모리에 생성한 것
- 멤버(변수, 함수) 사용 가
■인스턴스(instance)와 객체(object)의 차이
- 입장 차이
클래스에서 객체는 인스턴스이다.
객체는 생성된 객체 그 자체를 의미한다.
■클래스 형식
- 형식
[접근 제어자] class 클래스명
{
[접근 제어자] 멤버 변수;
[접근 제어자] 멤버 함수;
}
- 접근제어자 : 외부에서 멤버에 접근할 수 있는 권한 설정 (private, protected, public, default)
private : 같은 클래스 안에서만 접근이 가능
protected : 같은 클래스안에서와 다른 패키지에서 상속되었을 때만 접근 가능
public : 제약 없이 사용 가능
default :접근제어자를 생략했을 때 기본 제어자이며 같은 패키지 안에서만 접근가능
■클래스 생성과 사용 및 메서드 호출
- 생성 : new 키워드 사용
class A{...}
1)A test = new A();
2)A test
test = new A();
- 메서드(method) 호출
클래스변수.메서드
test.Method
- ex
class A { int m_nVar; //멤버변수
void Set(int nVar) { m_nVar = nVar; }
void Print() { System.out.println(m_nVar); } } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub
A Test1 = new A(); Test1.Set(12); Test1.Print();
A Test2 = new A(); Test2.Set(3); Test2.Print();
} } 결과: 12 3 |
■객체 참조변수
- 의미 : 클래스를 선언하면 객체를 참조할 수 있는 객체 참조변수가 된다.
- 선언형식
class A{...}
A Test = new A();
1) A Ref = Test
2) A Ref;
Ref = Test;
- ex
class A { int m_nVar; //멤버변수
void Set(int nVar) { m_nVar = nVar; }
void Print() { System.out.println(m_nVar); } } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub
A Test1 = new A(); Test1.Set(12); Test1.Print();
A Test2 = new A(); Test2.Set(3); Test2.Print();
A Ref = Test1; Ref.Print();
} } 결과: 12 3 12 |
■자바에서 static선언에 대해서
- static의 특징
공용 멤버(변수, 함수)가 된다
객체 생성 없이 호출이 가능
- static 주의사항
static은 멤버(변수,함수)와 함수명에서만 사용
지역 함수 안에 static붙일 수 없다(C 와 차이점)
static 메서드의 경우 메서드 안에 지역 변수를 포함할 수 없다.
- 멤버와 main외부의 함수에 static이 붙은 경우
class A { static int m_nVar; //정적 멤버변수 int m_nNum;
static void Set(int nVar) //정적 멤버함 { m_nVar = nVar; //m_nNum = 3; <- error!! }
void Print() { System.out.println(m_nVar); } } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub
A.Set(9); //
A Test1 = new A(); Test1.Print(); A Test2 = new A(); Test2.Print(); A.Set(3); Test1.Print(); Test2.Print();
} }
결과: 9 9 3 3 |
■함수의 매개변수가 참조형인 경우
class A{...}
class B{
public static void main(String[] args)
{
A test = new A()
Ref(test);
}
static void Ref(A RefClass) // == A RefClass = test;
{
....
}
}
class A { int m_nVar; } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A Test = new A(); Test.m_nVar = 7; System.out.println(Test.m_nVar); RefChange(Test); System.out.println(Test.m_nVar);
} static void RefChange(A test) { test.m_nVar = 9; } } 결과: 7 9 |
■오버로딩(overloading)
- 한 클래스 안에서 여러 개의 같은 메서드명을 사용하여 정의할 수 있는 기능
- 매개변수로 함수를 구분하여 리턴형은 상관없음
- ex.
class A { int add(int nVar1, int nVar2){return nVar1+nVar2;} float add(float fVar1, float fVar2){return fVar1+fVar2;} } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A Test = new A(); System.out.println(Test.add(0.5f, 0.3f)); System.out.println(Test.add(2, 7));
}
} 결과: 0.8 9 |
■생성자
- 클래스가 생성될 때 자동으로 호출되는 메서드
- 클래스 안의 멤버 변수 초기
- 형식1 : 클래스와 같은 이름을 가지는 메서드로 리턴형이 없다
class A
{
A(){...}
}
- 형식2 : 생성자는 매개변수를 가질 수 있으며 매개변수에 따라 호출된다.
class A
{
int m_nVar;
String m_strName;
A(int nVar){m_nVar = nVar;}
A(int nVar, String strName)
{
m_nVar = nVar;
m_strName = strName
}
}
- ex
class A { int m_nVar; String m_strName;
A(int nVar){m_nVar = nVar;} A(int nVar, String strName) { m_nVar = nVar; m_strName = strName; }
void Print() { System.out.println(m_nVar+" ,"+m_strName); } } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A Test = new A(12,"Hello"); Test.Print(); }
} 결과: 12 ,Hello
|
■this
- 객체 자체를 참조하는 키워드이며 C++의 this와 같은 역 할
class A { int m_nVar = 12; void Print() {System.out.println(this.m_nVar);} } public class ex01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A Test = new A(); Test.Print();
}
} 결과: 12 |
