클래스 (Class)
접근자 class 클래스 이름{...}
1. 접근(지정)자
-> 외부에서 이 클래스에 접근할 수 있는지 여부
- (public: 다른 클래스에서 이 클래스를 이용할 수 있음)
- 중괄호 안에 클래스의 필드와 메소드를 모두 작성
2. 멤버 (필드)
- 객체의 상태 값을 저장할 멤버변수. “접근지정자 타입 이름;”
3. 메서드
- 실행가능한 객체의 행위를 구현 (함수)
- 경우에 따라 생략가능! “접근지정자 반환타입 함수이름(매개변수) { ... return 값; }”
public class Location
{
public double latitude;
public double longitude;
public Location(double lat, double lon)
{
this.latitude = lat;
this.longitude = lon;
}
public double distance(Location other) {
...
}
}
객체
new
- 인스턴스 생성
- Heap 메모리 공간 할당
- 객체(nes)에게 참조값 리턴
객체의 생성과 사용 내부 과정
메모리 모델 (Memory Model)
- new를 통해 Location 인스턴스 생성 == Location
- Heap 메모리 공간 할당 == latitude, longitude
- 객체에게 참조값 리턴 == erica, seoul
함수의 인자 전달 (Parameter Passing)
변수의 유효 범위 (Variable Scope)
변수의 사용 가능한 범위
변수의 유효 범위가 한전됨에 따른 이점
- 이름(변수명) 재사용 가능
- 전체 프로그램의 모든 이름을 외울 필요 없음
- 이름이 필요한 곳에만 알려짐
1. 지역 변수
-> 현재 메서드 안에서만 값이 정의되고 사용될 수 있음
2. 멤버(전역) 변수
-> 현재 클래스의 어떠한 메서드에서도 값이 정의되고 사용될 수 있음
메서드 (Method)
1. main 메서드
프로그램 실행을 시작시키는 역할
- 무조건 있어야 하는 메서드
- this 객체를 반환하며 Initial을 취한다.
2. 반환값 (Return)
알고리즘이 다 수행되고 마지막으로 출력되는 값
- Return 이후의 코드는 실행되지 않는다.
- 반환 값을 받지 않아도 수행된다.
- 받지 않은 값은 무시
3. 메서드 오버로딩 (Overloading)
같은 이름의 메서드 여러개 정의
- 메서드 이름이 같다.
- 매개변수의 개수 or 매개변수의 자료형이 달라야 한다.
- 리턴 타입이 같아야 한다.
4. Public vs Private
Public : 어디에서나 접근 (읽기/ 쓰기) 가능
- Public 일 때, new로 객체 생성 및 사용 가능
Private : 현재 클래스/ 메서드 내에서만 접근 가능
- setter: 값을 바꾸어 줄 때 사용됨.
- getter: Private 때문에 setter의 반환값을 사용하지 못해서 getter를 이용
-> 필드 멤버변수들은 Private으로
-> 메소드들은 성질에 따라 Public or Private
5. Static 필드 변수 및 메서드
- 객체 생성 없이 바로 사용가능
ex) Math.PI, Math.abs(f)
- 타입 앞에 static 붙이면 정의 가능
- 정적 매서드로 동적 필드에 접근 불가능