1.메소드
1) 메소드란?
클래스의 멤버 함수, C/C++의 함수와 동일
자바의 모든 메소드는 반드시 클래스 안에 있어야 함(캡슐화 원칙)
2) 메소드 구성 형식
a.접근 지정자
public. private, protected, 디폴트(접근 지정자 생략된 경우)
b.리턴 타입
메소드가 반환하는 값의 데이터 타입
3)메소드 오버로딩
a.이름이 같은 메소드 작성
매개변수의 개수나 타입이 서로 다르고
이름이 동일한 메소드들
b.리턴 타입은 오버로딩과 관련 없음
4) 오버로딩된 메소드 호출
2. 가비지 컬렉션
1)객체 소멸
new에 의해 할당된 객체 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위
2)가비지
가리키는 레퍼런스가 하나도 없는 객체
누구도 사용할 수 없게 된 메모리
3)가비지 켈렉션
자바 가상 기계의 가비지 컬렉터가 자동으로 가비지 수집 반환
자바에서 가비지를 자동 회수하는 과정
가비지 컬렉션 스레드에 의해 수행
a.개발자에 의한 강제 가비지 컬렉션
System 또는 Runtime 객체의 gc() 메소드 호출
4) 가비지 사례
2.접근 지정자
1)자바의 접근 지정자
private, protected, public, 디폴트(접근지정자 생략)
2)접근 지정자의 목적
클래스나 일부 멤버를 공개하여 다른 클래스에서 접근하도록 허용
객체 지향 언어의 캡슐화 정책은 멤버를 보호하는 것
접근 지정은 캡슐화에 묶인 보호를 일부 해제할 목적
3) 클래스 접근 지정
a.다른 클래스에서 사용하도록 허용할 지 지정
b.public 클래스
다른 모든 클래스에게 접근 허용
c.디폴트 클래스(접근지정자 생략)
package-private라고도 함
같은 패키지의 클래스에만 접근 허용
d. public 클래스와 디폴트 클래스의 접근 사례
3. 맴버 접근
1) 맴버 접근 지정
a.public 멤버
패키지에 관계 없이 모든 클래스에게 접근 허용
b.private 멤버
동일 클래스 내에만 접근 허용
상속 받은 서브 클래스에서 접근 불가
c.protected 멤버
같은 패키지 내의 다른 모든 클래스에게 접근 허용
상속 받은 서브 클래스는 다른 패키지에 있어도 접근 가능
d.디폴트(default) 멤버
같은 패키지 내의 다른 클래스에게 접근 허용
2) 예제 멤버 접근의 지정자
class Sample {
public int a;
private int b;
int c;
}
public class AccessEx {
public static void main(String[] args) {
Sample aClass = new Sample();
aClass.a = 10;
// aClass.b = 10; private라고 선언되어 있어서 외부에서 접근 불가능
aClass.c = 10;
}
}
4. static 맴버와 non-static 맴버
1) non-static 멤버의 특성
공간적 특성 : 멤버들은 객체마다 독립적으로 별도 존재, 인스턴스 멤버라고도 부름
시간적 특성 : 필드와 메소드는 객체 생성 후 비로소 사용 가능
비공유 특성 : 멤버들은 다른 객체에 의해 공유되지 않고 배타적
2) static 멤버란?
객체마다 생기는 것이 아님
클래스당 하나만 생성됨
객체를 생성하지 않고 사용가능
3) 특성
공간적 특성 : static 멤버들은 클래스 당 하나만 생성
시간적 특성 : static 멤버들은 클래스가 로딩될 때 공간 할당
공유의 특성 : static 멤버들은 동일한 클래스의 모든 객체에 의해 공유
4) 비교표
5) static 멤버를 객체의 멤버로 접근하는 사례
class StaticSample {
public int n;
public void g() {
m=20;
}
public void h() {
m = 30;
}
public static int m;
public static void f() {
m = 5;
}
}
public class Ex {
public static void main(String[] args) {
StaticSample s1, s2;
s1 = new StaticSample();
s1.n = 5;
s1.g();
s1.m = 50;
s2 = new StaticSample();
s2.n =8;
s2.h();
s2.f();
System.out.println(s1.m);
s2.m = 50;
System.out.println(s1.m);
}
}
'JAVA' 카테고리의 다른 글
java #문제풀기2 객체문제 (0) | 2021.05.02 |
---|---|
java #문제 풀기1 객체문제 (0) | 2021.05.01 |
java #3 클래스와 객체(객체 지향, 생성자, this) (0) | 2021.04.29 |
java #2 반복문과 배열 (0) | 2021.04.28 |
java #1 식별자, 리터럴, 연산자, Scanner, if문, switch문 (0) | 2021.04.28 |