변수에는 선언위치에 따라 4가지로 구분될 수 있다.
클래스_인스턴스.인스턴스_변수의 형태로만 접근 가능하다클래스_이름.클래스_변수의 형태로도 접근이 가능하다포커 카드라는 객체를 만들기 위해서는 먼저 속성과 기능을 알아야 한다.
포커 카드의 속성으로는 카드의 높이, 너비, 숫자, 무늬가 있을 것이다.
이 때, 카드의 숫자와 무늬는 각각의 카드(인스턴스)마다 다르겠지만,
카드의 높이와 너비는 항상 동일해야 한다.
각 인스턴스마다 동일한 속성은 굳이 인스턴스 변수로 만들어 메모리를 차지할 필요가 없기 때문에 클래스 변수로 선언하면 된다.
class PokerCard {
static int width = 100;
static int height = 250;
int number;
String kind;
}
public class Main {
public static void main(String[] args) {
System.out.println("카드의 너비" + Card.width);
System.out.println("카드의 높이" + Card.height);
Card c1 = new Card();
c1.number = 7;
c1.kind = "Heart";
Card c2 = new Card();
c2.number = 3;
c2.kind = "Spade";
System.out.println("c1의 카드는 " + c1.kind + c1.number + "입니다.");
System.out.println("c2의 카드는 " + c2.kind + c2.number = "입니다.");
// 모든 카드의 크기 변경
Card.width = 50;
Card.height = 100;
// 전부 동일한 결과를 만들어냄
// c1.width = 50;
// c1.height = 100;
// c2.width = 50;
// c2.height = 100;
인스턴스 변수는 각 인스턴스마다 생성되는 값이어서 서로 다른 값이지만,
클래스 변수는 인스턴스가 모두 공유하는 값이기에 항상 공통된 값이다
메소드는 특정 작업을 수행하는 클래스 내에 작성된 일련의 문장들의 묶음이다.
클래스에서 기능을 표현하는 부분이 이 메소드이다.
메소드는 크게 두 부분, 선언부와 구현부로 나누어진다.
메소드를 정의한다는 것은 선언부와 구현부를 작성하는 것을 뜻하고 다음과 같은 형식으로 정의한다.
[접근제어자] [기타제어자] 반환타입 메소드이름([타입 변수명], ...) {
// 메소드 호출 시 실행될 코드
return 반환타입에 맞는 반환값;
}
[ ] 안에 있는 것들은 선택적인 부분이다.
접근제어자와 기타제어자에 대해서는 다른 글에서 상세히 알아보자.
반환값(return type)의 타입을 적는다int가 될 것이다,(쉼표)로 구분한다괄호{ } 안에 있는 것을 메소드의 구현부라고 한다.
메소드를 호출했을 때 수행될 문장들을 넣는다.
return 반환값;이 포함되어있어야 한다void인 경우에는 생략 가능하다 (컴파일러 자동 추가) int add(int x, int y) {
int result = x + y;
return result;
}
선언부의 리턴타입이 int로 선언되었고
구현부의 return 문 뒤에 int타입의 변수 result 가 작성되었다.
double add(int x, int y) {
int result = x + y;
return result;
}
double로 반환 타입을 선언하고 int 타입으로 반환하는 코드이다.
반환 타입과 반환 값이 일치하지 않지만 자동 형변환이 가능하기에 오류가 없다.
정의된 메소드를 수행하려면 그 메소드를 호출해야 한다.
호출하는 방법은 메소드이름( )으로 호출할 수 있고,
정의된 메소드의 매개변수와 일치하는 인자들의 개수와 타입을 적어주어야 한다
class SumOperation {
int sum(int x, int y) {
int result = x + y;
return result;
}
}
public class Main {
public static void main(String[] args) {
SumOperation so = new SumOperation();
int total = 0;
total = so.sum(3, 5);
// total = so.sum(3.0, 5.0); // 타입이 틀린 경우
// total = so.sum(3, 5, 6); // 개수가 틀린 경우
System.out.println(total);
}
}
위의 so.sum(3, 5) 처럼 선언된 메소드의 매개변수의 타입과 개수를 일치시켜서 메소드를 호출할 수 있다.
만약 메소드에 선언된 매개변수보다 개수가 많거나 타입이 다르다면 컴파일러 에러가 난다.