자바 개념2 (클래스, 필드, 메소드, 제어자)
자바 프로그램은 한 개 이상의 클래스로 구성
클래스(Class) ? 객체 지향 프로그래밍의 추상화(abstraction)라는 개념을 직접 구현한 것
선언방법
접근제어자 class 클래스이름 {
접근제어자 필드1의타입 필드1의이름;
접근제어자 필드2의타입 필드2의이름;
...
접근제어자 메소드1의 원형
접근제어자 메소드2의 원형
...
}
실제 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Car { private int currentSpeed; private int accelerationTime; public void accelerate(int speed, int second) { System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!"); } } public class Method01 { public static void main(String[] args) { Car myCar = new Car(); // 객체 생성, 클래스 이름 + 객체 참조 변수 이름 = new 클래스 이름(); myCar.accelerate(60, 3); // 메소드 호출 } } | cs |
자바프로그램이 실행되면 맨 먼저 main()메소드를 찾아 그안에 명령문을 차례대로 실행
따라서 하나의 자바 프로그램에는 main()메소드를 가지는 클래스가 반드시 하나는 존재해야 함
main()메소드는 반드시 public static void로 선언되어야한다.
클래스는 한 개 이상의 필드(field)나 메소드로(method) 구성
필드(field)? 클래스에 포함된 변수(variable)
변수 : 데이터를 저장할수 있는 메모리 공간
자바에서는 다음과 같이 8가지 종류의 기본형 변수를 제공
- 정수형 : byte, short, int, long
- 실수형 : float, double
- 문자형 : char
- 논리형 : Boolean
클래스 내에서 필드는 선언된 위치에 따라 다음과 같이 구분한다.
cs
1. 클래스 변수(static variable) : 클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수
2. 인스턴스 변수(instance variable) : 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수
3. 지역 변수(local variable) : 메소드나 생성자, 초기화 블록 내에 위치한 변수
선언된 위치에 따라 구분되는 변수는 생성 및 소멸 시기, 저장되는 메모리 공간과 사용 방법까지도 서로 다름
메소드(method)? 어떠한 작업을 수행하기 위한 명령문의 집합
클래스 내에서 메소드는 static 키워드의 여부에 따라 다음과 같이 구분됩니다.
1 2 3 4 5 6 7 8 9 10 | class Car { boolean door; // 인스턴스 변수 void openDoor() { // 인스턴스 메소드 door = true; } static void toggleDoor(boolean d) { // 클래스 메소드 return !d; } } | cs |
1. 클래스 메소드(static method) : static 키워드를 가지는 메소드
2. 인스턴스 메소드(instance method) : static 키워드를 가지지 않는 메소드
**static 키워드**
프로그램 시작시 최초에 단 한번만 생성되고 초기화 됨
static이 붙으면 클래스의 모든 객체가 공유 가능 심지어 클래스 객체 생성 없이도 호출하여 사용 가능
다른 클래스에서 접근하려면 class명.static변수명 써주면 됨
클래스 앞에 붙은 접근 제어자가 무엇이냐.
객체 지향에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념이다.
그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 된다.
자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공한다.
접근 제어자의 종류
① private
private 접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없습니다.
② public
public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있습니다.
③ default
접근 제어자가 지정되지 않으면 자동적으로 default 접근 제어를 가지게 됩니다.
default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있습니다.
④ protected
protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.
접근 제어자의 접근 범위가 보다 많은 제어자부터 적은 제어자 순으로 나열하면
public > protected > default > private
접근 제어자말고 다른 제어자는 무엇이 있느냐.
제어자 종류
① static //위에서 다룸
② final
변경할 수 없다는 의미로 사용. c++에서 const랑 똑같은 기능
필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수(constant)가 되고
클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 된다.
메소드에 사용하면 해당 메소드는 오버라이딩(overriding)을 통한 재정의가 불가능 하다.
③ abstract // 객체지향프로그래밍 설명할때 다룸
abstract class Car { // 추상 클래스
abstract void brake(); // 추상 메소드
}
클래스나 메소드에 붙일 수 있음
반드시 사용해야하는 메소드를 추상 클래스에 추상 메소드로 선언해놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의 해야 한다.