마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자바 문법 질문입니다.

0 추천

안녕하세요.

public void onReceive( ) {
        getMyClass().mothod();
    }
 
private MyClass getMyClass(){
        return MyClass;
}
 
class MyClass{
        public static void mothod(){;}    
}
 
위 코드와 같이 static 메소드를 가지는 클래스를 가져와서  메소드를 호출하는 코드를 짜고 싶은데요. 저런식의 문법은 에러가 나네요.. 저런 경우에는 어떤식으로 코드를 작성해야 하는지 궁급합니다.
여룽이 (4,750 포인트) 님이 2015년 4월 22일 질문

1개의 답변

0 추천
method()가 static이라는 의미는 MyClass 객체를 생성할 필요가 없는것이므로

onReceive()에서 MyClass.method() 이렇게 사용하면 됩니다.

getMyClass()는 필요 없는 메소드입니다.
Gradler (109,780 포인트) 님이 2015년 4월 22일 답변
getMyClass에서 여러 클래스를 리턴 할 수 있습니다. 물론 리턴하는 클래스들은 한가지 인터페이스를 상속하고 있구여 그래서 getMyClass()의 리턴 값은 사실 IMyClass 라고 보시면 됩니다.
MyClass가 인터페이스라면 위에 언급된 static mothod라는 것은 어차피 MyClass를 구현하고 있는 쪽에 선언되어 있는 메소드네요 그럼 당연히 인터페이스에 선언되어 있지 않은 메소드이기 때문에 위와 같이 사용할 수 없습니다.
질문을 처음부터 더 명확하게 해주시고 위 내용만으로는 의도를 알 수가 없습니다. 의도가 분명해야 어떤 디자인 패턴을 사용하면 좋을지에 대한 조언을 드릴 수가 있을 것 같네여
디자인패턴을 질문 드린게 아니고 저 상태에서 저코드를 사용가능하게 할 문법이 궁금한거에요. static mothod는 당연히 인터페이스에 정의되어 있는 함수이기에 저런 방식으로 쓸 수 잇는 문법이 없나 해서 질문드린거네요. 그리고 위 코드는 애초에 getMyClass()에 return MyClass;에서 빨간줄 납니다.
인터페이스에 static 메소드 선언은 불가능합니다
작성자님이 언급한 "static mothod가 당연히 인터페이스에 정의되어 있는 함수"라는게 당최 무슨 소린지 이해가 안갑니다
추상클래스 사용했어요. 그리고 이건 중요 한게 아니고
static 함수로 구성된 클래스를 팩토리 패턴이라고 하나요 그런식으로 사용 할 수 잇는 방법이 있는가가 궁금한겁니다. 지금 보면 애초에 return MyClass; 여기서 에러가 나서 말이죠ㅜㅜ.
리턴타입이 MyClass인데 리턴할 객체를 지정하지 않았으니 당연히 에러 나죠

private MyClass getMyClass() {
    return new MyClass();
}
아무거나냐님이 잘 설명해주셨는데 ㅋㅋㅋ
팩토리패턴은 객체 생성을 위임하는 팩토리 클래스를 만드는걸텐데요.
애초에 추상클래스든 인터페이스든 저런식으로 실제 메소드를 재구현해줘야하는 메소드들은 static으로 선언못합니다.
public abstract class ISDCard {
    static public void onReceive(){
        System.out.println("부모");
    }
}
그냥 부모 클래스 상속 받았었네요. 어쨋든 저걸 상속받아서 하위에서 static을 다시 구현했습니다.ㅜㅜ 아 이걸 물어 보는게 아닌데
추상클래스에 스태틱 메소드 선언 안될텐데요
public void onReceive( ) {
        getMyClass().mothod();
    }

    private MyClass getMyClass(){
        return new MyClass();
    }

    public static abstract class ISDCard {
        static public void onReceive(){
            System.out.println("부모");
        }
    }
    static class MyClass extends ISDCard{
        public static void mothod(){}    
    }

지금 이걸 하고 싶은건가요?? 질문이 명확하지 않으니 답변다시는 분들도 혼란이 오잖아요 ㅎㅎ
일단 이렇게 하면 에러는 안납니다 뭘 하고 싶으신건진 모르겠지만..
스태틱 메소드를 오버라이딩 하신다는 말씀?
해도 오버라이드 안될텐데요?
오버라이드 하는 이유가 하위타입 객체를 생성해서 상위타입 레퍼런스에 집어 넣서 다형성을 만든다는 말인데 스태틱 메소드 오버라이드해도 그냥 상위 타입 스태틱 메소드 실행돼요
네 ㅜㅜ 이제 알았네네요.스태틱은 오버라이드해도 부모가 실행되서 안되겠네요.. 뭘 하고 싶다기보다 저런식의 코딩은 안되나 생각해보다가 질문올렸네요. 질문을 넘 대충올렷나바요 흑
정확히 말하면 오버라이드가 아녜요. 그냥 다른 스태틱 메소드인데 이름만 같은거지요.
...