[TIL] 클래스, 객체, 메소드

김대욱·2023년 1월 20일
0

Card 클래스

트럼프 카드를 정의한 클래스.
Class Card() {
	int kind; //카드 무늬
    int num; //카드 숫자
    static int width; //폭
    static int height; //높이
}

클래스 구성

인스턴스 변수

개별적인 값을 가져야 할때는 인스턴스 변수로 선언.
int kind
int num

클래스 변수

공통적인 값을 가져야 할때는 클래스 변수로 선언.(static)

static int width;
static int height;

클래스를 사용하는 방법

Card c = new Card(); // Card 클래스의 인스턴스화.(객체 생성)
//인스턴스 변수 접근. c에 접근자를 이용한다.
c.num = 1; 
c.kind = 2;
//클래스 변수 접근. Card클래스에 접근자를 이용한다.
Card.width = 60;
Card.height = 180;

여기서 c.height의 값을 출력해보면 c 변수에 따로 초기화를 하지 않았는데도 180이 나온다.

System.out.prinln(c.height); // 180

클래스 변수는 객체마다 만들어지지 않고, 한곳에 하나만 만들어진다, 만들어진 객체들이 공유할 수 있다.

메소드

메소드는 (접근제어자) <-생략가능->(예약어) 반환타입 메소드명(매개변수) 로 선언이 가능하다
반환타입이 void일 경우는 return이 필요 없지만 void가 아닐 경우에는 맞는 자료형으로 return을 꼭 해주어야 한다.

static int max(int[] arr) {
	int maxValue = -999999;
	if (arr.length == 0 || arr == null )
		return maxValue;

	for (int i = 0; i < arr.length; i++) {
		if (maxValue < arr[i]) {
                maxValue = arr[i];
		}
	}
	return maxValue;
}

이 메소드는 정수형 배열인 arr을 받아서 매개변수로 배열의 최댓값을 int형으로 리턴해주는 메소드다. 배열의 길이가 0이거나 null이 들어왔을 경우엔 -999999를 리턴해줘야 하는데, null인지 체크하는 부분에서 NullPointerException 에러가 났다.

if (arr.length == 0 || arr == null )

이유가 뭘까 생각해 보니 null일때 .length로 접근해서 에러가 나는거였다.

if (arr == null || arr.length == 0)

순서를 바꿔주니 간단히 해결되었다.

앞으로 null을 다룰때는 조건문의 순서를 신경써야겠다.

0개의 댓글