본문 바로가기
멘토씨리즈 자바/예제

[응용문제] 클래스

by Hwanii_ 2023. 5. 21.
728x90

SECTION 07 - 클래스

199 page.

 

1. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.

 

1) 객체를 중심으로 프로그램 구조를 설계하고 프로그래밍하는 것을 객체 지향 프로그래밍이라고 합니다. (___)

2) 하나를 클래스로 하나의 객체만 만들 수 있습니다. (___)

 

=>

O

X

 

2. 다음 중 객체가 될 수 있는 것을 모두 고르세요.

 

1) 학생

2) 수영장

3) 꽃

4) 나이

 

=>

1), 2), 3)

 

3. 다음 빈칸에 알맞은 단어를 작성해 보세요.

 

1) 클래스의 3요소는 (_____), (_____), (_____) 입니다.

2) 클래스를 선언할 때 (_____) (을)를 이용해 접근 범위를 설정할 수 있습니다.

3) 클래스는 크게 (_____) 클래스, (_____) 클래스로 분류할 수 있습니다.

 

=>

1) 멤버변수, 생성자, 메서드

2) public (접근제어자)

3) 데이터( 클래스), 메인 (클래스)

 

4. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며, 어떻게 해결해야 할까요 ?

 

class Speaker {
	void turnOn() {
    	static int volume = 50;
        sysout("스피커의 전원이 켜졌습니다. 기본 볼륨은 " + volume + " 입니다.");
    }
}

public class PRACTICE_07_04 {
	public statice void main(String[] args) {
    	Speaker speaker = new Speaker();
        speaker.turnOn();
    }
}

 

=>

1. turnOn 메서드 자체가 인스턴스 메서드 이다. (static이 붙혀있지 않기 때문에)

인스턴스 메서드는 인스턴스 변수를 필요로 한다.

현재, turnOn 메서드에는 객체와 무관한 클래스 변수가 들어가 있기 때문에,

해당 변수의 static을 제거해줘서 인스턴스 변수로 바꿔준다.

 

또는

 

2. 클래스 변수 static int volume = 50; 을 turnOn() 메서드 밖으로 꺼낸다.

그러면 turnOn 메서드는 공유자원인 클래스 변수를 사용하게 된다.

 

또는

 

3. turnOn 메서드 자체에 static을 붙혀줘 클래스 메서드로 만들어 준다음에,

클래스 변수인 static int volume = 50; 을 쓰게 한다.

(아니면 클래스 메서드 안으로 넣고 static을 빼서 지역변수인 int volume으로 사용 해도 된다)

클래스 메서드는 객체와 무관하게 사용이 가능해서,

main()에서 객체를 생성해주지 않아도 사용이 가능 하다.

 

 

static을 빼면 공유할 수 있는 변수가 사라져서 빨간 밑줄이 생기는 모습을 확인.

 

이렇게 지역변수로 하던가,

 

메서드에 static을 빼주면 더이상 클래스 메서드가 아니라,

객체를 필요로 하게 된다.

 

참조변수.인스턴스메서드 로 turnOn 메서드를 부르는 상황.

 

 

static int volume 을 밖으로 빼서 해도 ok

반응형

'멘토씨리즈 자바 > 예제' 카테고리의 다른 글

[응용문제] 생성자  (0) 2023.05.21
[응용문제] 메서드  (0) 2023.05.21
[응용문제] 배열  (0) 2023.05.21
[응용문제] 제어문-2  (0) 2023.05.21
[응용문제] 제어문-1  (2) 2023.05.21