-
자바 개념2 (클래스, 필드, 메소드, 제어자)학교 수업/자바프로그래밍 2020. 4. 16. 21:19
자바 프로그램은 한 개 이상의 클래스로 구성
클래스(Class) ? 객체 지향 프로그래밍의 추상화(abstraction)라는 개념을 직접 구현한 것
선언방법
접근제어자 class 클래스이름 {
접근제어자 필드1의타입 필드1의이름;
접근제어자 필드2의타입 필드2의이름;
...
접근제어자 메소드1의 원형
접근제어자 메소드2의 원형
...
}
실제 코드
12345678910111213141516class 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
클래스 내에서 필드는 선언된 위치에 따라 다음과 같이 구분한다.
12345678class car {static int modelOutput; // 클래스 변수String modelName; // 인스턴스 변수void method() {int something = 10; // 지역 변수}}cs 1. 클래스 변수(static variable) : 클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수
2. 인스턴스 변수(instance variable) : 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수
3. 지역 변수(local variable) : 메소드나 생성자, 초기화 블록 내에 위치한 변수
선언된 위치에 따라 구분되는 변수는 생성 및 소멸 시기, 저장되는 메모리 공간과 사용 방법까지도 서로 다름
메소드(method)? 어떠한 작업을 수행하기 위한 명령문의 집합
클래스 내에서 메소드는 static 키워드의 여부에 따라 다음과 같이 구분됩니다.
12345678910class 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(); // 추상 메소드
}
클래스나 메소드에 붙일 수 있음
반드시 사용해야하는 메소드를 추상 클래스에 추상 메소드로 선언해놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의 해야 한다.
'학교 수업 > 자바프로그래밍' 카테고리의 다른 글
자바 개념 6(thread) (0) 2020.04.23 자바 개념 5(socket programming의 바탕 TCP/IP) (0) 2020.04.23 자바 개념 4 (입출력) (0) 2020.04.18 자바개념3 (상속) (0) 2020.04.16 자바 개념 (0) 2020.04.16