달달한 스토리

728x90
반응형

 

이 글은 간단한 인터페이스에 대한 예제만을 보여드립니다.

 

깊게는 들어가지 못하는 제 게으름과 실력을 탓합니다.

 

flutter만 하다가 자바로 넘어온 지 어언 2주가 넘어간다.

 

문득 궁금한 기능이 생겼는데,

 

바로 A라는 액티비티에 있는 메서드를

 

내가 B액티비티 혹은 프래그먼트에 있을 때,

 

실행시키고 싶다면 어떻게 해야 할까?

 

flutter에 경우는

 

생성자로 Function을 넘겨주어

 

그 function을 실행하면, 생성자를 넘겨준 쪽에서

 

이 함수가 실행이 되었다.

 

그렇다면 자바에서 어떻게 할까?

 

바로

인터페이스다.

 

728x90

 

나도 항상 이 인터페이스를 그날그날 이해하면서도, 잘 모르고 넘긴 경우가 있다.

 

사실은 아직도 잘 모르지만,

 

이번에 내가 위와 같은 상황에서 인터페이스를 활용하는 법을 

 

기록하기 위해 적어둔다.

 

말 그대로 정말 필요한 기능만을 가져가 보자.


자 우선 위와 같은 상황이 벌어졌다고 생각해봅시다.

 

우선 인터페이스를 만들어 줍시다.

 

public interface TestClickListener {

    void hamburger();

    void pizza(String cheese, String coke);
}

 

인터페이스라는 뜻은 무언가 입력을 했을 때 그 입력 내용을 전달해주는

 

매개체?? 같은 역할이라고 할 수 있습니다.

 

저희가 컴퓨터 키보드를 입력하면 화면에 글씨가 써지는 상황에선

 

키보드가 인터페이스라고 할 수 있습니다.

 

위에 처럼 TestClickListener를 만들어주고,

 

안에 두 메서드를 달아줍니다.

 

하나는 파라미터가 없고,

 

하나는 두 개나 있습니다.

 

반응형

 

현재 저 두 메서드는 빈 껍데기이지만, 저 두 인터페이스 메서드로 인자를 전달하거나,

 

메서드를 실행해 보겠습니다.

 

다음은 MainActivity입니다.

 

public class MainActivity extends AppCompatActivity implements TestClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), MainActivity2.class);
                startActivity(intent);
            }
        });

    }

    private void iLikePizza(String cheese, String coke) {
        Log.d("i like pizza" + cheese + coke, "yes");
    }

    private void iLikeBurger() {
        Log.d("i like burger", "yes");
    }



    @Override
    public void hamburger() {
        iLikeBurger();
    }

    @Override
    public void pizza(String cheese, String coke) {
        iLikePizza(cheese, coke);
    }
}

 

 

 

코드를 차례차례 보겠습니다.

 

public class MainActivity extends AppCompatActivity implements TestClickListener{

...
}

 

우선 우리가 실행하고 싶은 메서드나 기능이 있다면,

 

그 기능이 있는 곳에 인터페이스를 위와 같이 implements안에 달아주어야 합니다.

 

그러면 아래 빨간 줄이 뜨게 되는 데

 

맥 기준으로 option + Enter를 누르게 되면(윈도우는 Alt + Enter)

 

implement methods를 추가하라고 나옵니다.

 

아까 저희가 인터페이스에 적어주었던 껍데기 들입니다.

 

 @Override
    public void hamburger() {
    
    }

    @Override
    public void pizza(String cheese, String coke) {
     
    }

 

바로 이 녀석들이죠.

 

인터페이스에 두 개의 메서드가 정의되어있으면 무조건 이런 식으로

 

구현을 해주어야 합니다.

 

다시 상황을 보죠.

 

우리는 MainActivity에 iLikeBurger 메서드와

 

iLikePizza 메서드(파라미터 포함)를 실행시키고 싶습니다.

 

바로 MainActivity2에서 특정 행동을  할 때! 말이죠. 

 

우선 인터페이스 안에 저희가 원하는 메서드를  삽입해줍니다.

 

 

 @Override
    public void hamburger() {
        iLikeBurger();
    }

    @Override
    public void pizza(String cheese, String coke) {
        iLikePizza(cheese, coke);
    }

 

자 이제 MainActivity2를 봅시다.

 

public class MainActivity2 extends AppCompatActivity {

    TestClickListener testClickListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                testClickListener = new MainActivity();
                testClickListener.hamburger();
                testClickListener.pizza("치즈다", "콜라다");
            }
        });
    }
}

이곳에서 버튼을 누르면 MainActiviy에 있는 메서드가 실행되게 코드를

 

구현하였습니다.

 

위에서부터 살펴봅시다.

 

우선 저희의 인터페이스를 선언해주고,

 

버튼을 클릭했을 때, 리스너 안에 MainActivity에 객체를 넣어줍니다.

 

그러고 나서 받은 MainActivity 인스턴스를 통해

 

두 메서드를 위와 같이 실행해줍니다.

 

pizza메서드 같은 경우는 파리미터도 넣어줍니다.

 

그렇습니다. 아까 그 껍데기 인터페이스 메서드가 이렇게 쓰이는 것입니다.

 

그렇게 버튼을 누르게 되면,

이런 식으로 MainActivity에 메서드가 실행된 것을 알 수 있습니다.

 

오늘은 간단한 예제를 통해서 인터페이스에 기능을

 

맛보았습니다.

 

아직 콜백에 대한 개념이 저도 적어, 이렇게 쓰는 게

 

정석은 아니라 생각하지만,

 

천천히 배워나가는 것 중에 하나라고 생각합니다.

 

내일도 파이팅!!

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading