인프런 커뮤니티 질문&답변

바갱님의 프로필 이미지
바갱

작성한 질문수

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

퀴즈 #12

12장 퀴즈 runnableSet 질문

작성

·

76

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 인터페이스를 구현하여서? 하는걸 보았습니다

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

 

답변 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 + " 상품 준비 완료 --");
    }
}

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

감사합니다.

바갱님의 프로필 이미지
바갱
질문자

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

감사합니다!!

바갱님의 프로필 이미지
바갱

작성한 질문수

질문하기