객체(object)를 만들 수 있는 설계도. 상태(=필드)
+ 행위(=메서드)
가 정의되어 있다.
public class 클래스이름 {
}
작성 규칙 | 예시 | |
---|---|---|
1 | 하나 이상의 문자로 이루어져야 한다 | Car, SportsCar |
2 | 첫번째 글자는 숫자가 올 수 없다 | Car, 3Car(x) |
3 | '$', '_' 외의 특수 문자는 사용할 수 없다 | $Car, _Car, @Car(x), #Car(x) |
4 | 자바 키워드는 사용할 수 없다 | int(x), for(x) |
객체의 고유 데이터 및 상태 정보를 저장하는 곳.
[접근제한자] 반환타입 필드명 [= 초기값] ;
필드는 생성자
와 메서드
에서 변경이 가능하다.
(단 외부 클래스에서 필드를 변경하려면 객체
와 도트.
를 이용해서 변경해야 한다)
public class Car {
int speed; // 필드
Car() {
speed = 50; // 생성자에서 필드 변경
}
void method() {
speed = 10; // 메서드에서 필드 변경
}
}
public class CarExample {
public static void main(String[] args) {
Car car = new Car(); // 객체 생성
car.speed = 100; // 외부 클래스인 CarExample 클래스에서 Car클래스의 필드인 speed를 변경
}
}
클래스에서 특정 작업을 수행 하기위한 행위를 의미.
객체간의 데이터 전달 수단. 기능 및 동작 역할을 한다.
메서드가 실행되면 stack
공간에 쌓인다.
[접근제한자] 반환타입 메서드이름 (매개변수) {
실행 할 코드 작성
}
반환타입에서 반환값이 없을 경우에는 void
, 반환값이 있을 경우에는 동일한 반환타입
이 와야한다.
반환(return)을 하는 이유?
--> stack의 생명주기가 짧기 때문에 stack 내부의 값을 사용하려면 return을 사용해야 한다.
매개변수
는 메서드가 실행될 때 필요한 데이터를 외부에서 받기 위해 사용한다.
1. 내부 클래스에서 메서드 호출 할 경우
void run() { ... };
void stop() { ... };
void 내부메서드() {
run();
stop();
}
2. 외부 클래스에서 메서드 호출 할 경우
void 외부메서드() {
클래스 인스턴스변수 = new 클래스();
인스턴스변수.run();
인스턴스변수.stop();
}
메서드의 소괄호 ( )
안에 들어가는 변수.
초기화의 목적을 갖는다.
메서드를 호출했을때 넣는 임의의 값.
ex) 매개변수 및 인수 예제
public class MethodEx03 {
static void 자판기음료1 (int coin) {
System.out.println("동전 투입");
}
static void 자판기음료2 (double paper) {
System.out.println("지폐 투입");
}
static void 자판기음료3 (String card) {
System.out.println("카드 투입");
}
static void add (int n1, int n2) {
int sum = n1 + n2;
System.out.println(sum);
}
public static void main(String[] args) {
자판기음료1(500); // 인수 : 메서드 안에 들어간 임의의값
자판기음료2(1000.50);
자판기음료3("삼성카드");
add(5,6);
}
}
자신의 속성을 가지고 있고 다른 것과 식별 가능한 것. 속성(=필드)
+ 동작(=메서드)
로 이루어져 있다.
객체들은 각각 독립적이며 다른 객체와 메서드를 통해 서로 상호작용 하면서 동작.
1. 클래스 변수;
변수 = new 클래스();
2. 클래스 변수 = new 클래스();
인스턴스
: new 연산자와 생성자를 이용해서 만들어진 객체를 의미.
오브젝트
: new 연산자를 사용하여 인스턴스가 될 수 있을 경우 (아직 new 연산자 이용해서 객체 변수를 생성하지 않은 상태)
객체지향프로그램 OOP(Object Oriented Programing)에서 상태(=필드)는 행위(=메서드)에 의해서 변경되어야한다. (즉 클래스의 필드는 메서드에 의해 변한다)
누군가는 상태(=필드)를 직접 변경할 수 있기 때문에 상태(=필드) 앞에 접근제어자 private를 붙여서 접근 할 수 없도록 해야한다.
클래스명과 같은 이름을 가진 메서드.
new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 위해 사용.
1. 기본생성자
[public] 클래스() {
}
2. 명시적으로 생성자 선언
클래스 (매개변수) {
// 객체의 초기화 코드
}
모든 클래스는 기본 생성자가 반드시 존재하며, 하나 이상을 가질 수 있다.
클래스 내부에 생성자 선언을 생략하면 컴파일러가 클래스 내부에 기본생성자(default constructor)
를 바이트 코드에 자동으로 추가시킨다.
ex) 생성자 예시
public class Cat {
String name;
String color;
public Cat() {
}
public Cat(String n, String c) {
name = n;
color = c;
}
}
public class CatApp {
public staic void main(String[] args) {
Cat c1 = new Cat();
System.out.println("c1 = " + c1.name + ", " + c1.color); // c1 = null, null
Cat c2 = new Cat("집사", "하얀색");
System.out.println("c2 = " + c2.name + ", " + c2.color); // c2 = 집사, 하얀색
}
}
public 클래스이름( ) { }
은 기본 생성자이며 생략 가능하다. 하지만 매개변수를 갖는 임의의 생성자를 만들었다면 기본 생성자를 필수적으로 만들어야한다.
new 연산자를 이용하여 다른 상태(state)를 갖는 객체를 만들기 위해서 필드를 초기화 하지않고 선언만 한다.
출처
- 이지업 컨텐츠 내의 데어프로그래밍 자바강의
- 이것이 자바다(책)