inflearn logo
강의

Course

Instructor

Mastering Java Basics with Teacher Eun-jong (Do it! Introduction to Java Programming) - Part 1 (Basics)

Utilizing Abstract Classes and Template Methods

upgradeLevel에 인수를 넣기 위해 새로 AdvancedLevel 과 같은 instance를 생성하는게 어색하게 느껴집니다.

334

rkdtlseb

1 asked

0

안녕하세요 강의 잘 듣고 있습니다.

저는 upgradeLevel 을 하기 위해서 새로 인스턴스를 생성하고 넘겨주는 방식이 아닌 게임처럼 한단계씩 업그레이드 되는 방식으로 구현하고 싶습니다. 그래서 다음과 같이 생각해서 적어봤는데, 2가지 문제가 있는것 같습니다. 어떻게 하면 될까요?

  public BeginnerLevel level = new BeginnerLevel();

  public void upgradeLevel(PlayerLevel level) {
    // if(level.levelName )
    if (level instanceof BeginnerLevel) {
      level = new AdvancedLevel();
    } else if (level instanceof AdvancedLevel) {
      level = new SuperLevel();
    } else if (level instanceof SuperLevel) {
      System.out.println("you are already highest level");
    }
  }

첫째로 instanceof를 잘못쓰고 있는 것 같고, 둘째로 level = new AdvancedLevel() 이런식으로 재정의 하는게 가능한가요? 궁금합니다.

java 객체지향

Answer 1

2

eunjong

아... Beginner이면 Advanced로 이렇게 바로 업그레이드를 하고 싶으신 거군요 예 이 경우 instanceof를 쓰는건 기능상은 맞지만, 실제 로직으로 보면 좀 어색하겠습니다. 대부분 게임에서는 업그레이드가 되는 조건이 따로 있겠죠 그래서 제가 이 코드는 PlayerLevel에 모든 상속된 인스턴스가 대입될 수 있다는 것을 보여드리려고 둔 메서드입니다.

만약 어떤 조건을 두고 그 조건에 맞게 upgrade를 하는 것이 더 맞는것 같습니다.

그리고 모든 PlayerLevel에서 상속된 클래스의 인스턴스는 PlayerLevel 타입으로 대입될 수 있으므로 level = new AdvancedLevel() 하실수 있습니다. 다만 이런 경우는 instance들을 미리 생성해두고

PlayerLevel[] playerLevels = {new BeginnerLevel(), new AdvanceLevel(), new SuperLevel()};

이렇게 저장해둔뒤 level = playerLevels[Level.ADVANCED];

Level.ADVANCED 는 enum 으로 처리하고

위와 같이 하면 더 좋을것 같습니다.

 

질문드려요

0

437

4

구현과 오버라이딩

0

238

1

문제답안

1

240

2

교재 속 나 혼자 코딩 문제 답안관련 질문

1

320

1

회차 강의pdf파일 보는 방법이 없나요?

0

567

1

singleton pattern

0

380

2

return 사용되는 위치가 궁금합니다

0

469

2

오버라이드 할때 @override 안적어도 되나요?

0

545

1

pakage 내에서 main함수는 하나만 존재해야하나요?

0

727

1

왜 이렇게 하는지 설명은 없나요?

0

411

1

p.88 연습문제1 질문입니다.

0

281

1

강의노트 어디서 볼수 있을까요?

0

449

4

강의노트 어디서 볼 수 있을까요?

0

677

2

예제코드 다운로드 오류

0

538

1

복습문제는 어디서 확인할수있을까요?

0

410

1

static 메서드 main문 안에 선언 시 오류 발생 이유가 궁금합니다.

0

386

1

강의노트는 어디서 확인할 수 있을까요

0

485

1

실행을 하면 결과가 깨져서 나와요

0

374

3

복습 문제 들은 어디서 받아 볼 수 있나요

0

389

2

비트 연산자 질문

0

295

1

p.243

0

233

2

p.237

0

250

2

p.196

0

271

1

질문드려요

0

242

1