inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #12

12장 퀴즈 runnableSet 질문

128

바갱

작성한 질문수 1

0

 퀴즈 풀이 진행시

저는 _03_JOIN 에서 사용한 것 처럼 클래스 내부에 함수를 만들어서 호출해서 사용하는 방식을 했습니다.

 

코드

package chap_12;

public class _Quiz_12 {
    public static void main(String[] args) {

        Pkg pkg1 = new Pkg();
        Pkg pkg2 = new Pkg();

        Runnable a = new Runnable() {
            @Override
            public void run() {
                String name = "A";
                int number = 1;
                for (int i = 1; i <= 5; i++) {
                    pkg1.pack("A");
                }
                System.out.println(" -- A 상품 준비 완료 -- ");
            }
        };

        Runnable b = new Runnable() {
            @Override
            public void run() {
                String name = "B";
                int number = 1;
                for (int i = 1; i <= 5; i++) {
                    pkg2.pack("B");
                }
                System.out.println(" -- B 상품 준비 완료 -- ");
            }
        };


        Thread pkgA = new Thread(a);
        Thread pkgB = new Thread(b);

        pkgA.start();
        pkgB.start();

        try {
            pkgA.join();
            pkgB.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        Dmz();

    }

    public static void Dmz() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("세트 상품 포장 시작 " + i + "/5");
        }
        System.out.println(" == 세트 상품 포장 완료 == ");
    }
}


class Pkg {
    public int number = 1;

    public void pack(String name) {
        // 직원 1 : 3번방 청소 완료
        System.out.println(name + "상품 준비 " + number + "/5");
        number++;
    }
}

 

영상에서는 이전과 다르게 Runnable 인터페이스를 구현하여서? 하는걸 보았습니다

결과는 똑같이 나오는데 기능적으로나 프로그램적으로 어떠한 차이가 있는지 알려주시면 감사하겠습니다.

 

java 객체지향

답변 1

1

나도코딩

안녕하세요?

Runnable 내에서 '상품 준비' 를 출력하는 부분을 Pkg 클래스 내에서 처리해 주셨네요 😊
이렇게 하셔도 동작에 있어서는 차이가 없어 보입니다. 다만 number 를 인스턴스 변수로 선언할 필요 없이 pack(String name, int number) 와 같이 직접 받아서 출력해도 되겠네요. 문제 풀이 잘 해주셨습니다.

그런데 이왕이면 Pkg 클래스를 만드신 김에 Runnable 인터페이스를 직접 구현하셔서 클래스 내에서 모든 처리를 하게끔 하는 편이 더 좋을 것 같아요! 아래는 수정된 코드입니다. 상품이 A 인지 B 인지 정도만 받아서 클래스 내에서 처리하도록 하였습니다.

package chap_12;

public class _Quiz_12 {
    public static void main(String[] args) {
        Pkg pkg1 = new Pkg("A");
        Pkg pkg2 = new Pkg("B");

        Thread pkgA = new Thread(pkg1);
        Thread pkgB = new Thread(pkg2);

        pkgA.start();
        pkgB.start();

        try {
            pkgA.join();
            pkgB.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        Dmz();

    }

    public static void Dmz() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("세트 상품 포장 시작 " + i + "/5");
        }
        System.out.println(" == 세트 상품 포장 완료 == ");
    }
}


class Pkg implements Runnable {
    private String product;

    public Pkg(String product) {
        this.product = product;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(product + " 상품 준비 " + i + "/5");
        }
        System.out.println(" -- " + product + " 상품 준비 완료 --");
    }
}

작성하신 코드와 비교해보시면 학습에 도움될 것 같아요 😊

감사합니다.

0

바갱

도움이 되었습니다 수정도 해주시고 감사합니다 남은 강의도 열심히 보겠습니다!!

감사합니다!!

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

0

137

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

113

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

92

2

getter setter

0

101

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

78

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

75

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

114

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

115

2

응용이 어렵습니다.

0

203

2

IntelliJ가 보이지 않습니다.

0

182

3

JDK 버전 문의

0

128

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

120

2

Iterator 문의

0

104

1

코드 순서 문의

0

139

1

클래스 메소드

0

149

2

Quiz_05 관련 질문드립니다 !

0

117

2

다운로드가 안됩니다

0

165

2

다형성

0

119

2

HashMap

0

80

2