흠.. JAVA 에서 static method를 interface 처럼 선언하는 방법??

2,623 views
Skip to first unread message

고종봉

unread,
Jan 27, 2010, 9:41:09 PM1/27/10
to ks...@googlegroups.com
안녕하세요??

자바 문법에 대해 궁금한게 있어서 글 올립니다.


Class에서 static method를 통해 기능을 구현하려고 하는데,

해당 method를 interface에서 처럼 선언해놓고 사용하고 싶습니다.

선언된 static method 형태를 반드시 구현해야 하도록 말이죠..

그런데,, interface와 abstract class에서는 static method를 사용할 수 없더군요..


그럼,, static method 는 인터페이스 처럼 선언해놓고 사용하는 방법이 없는걸까요??

혹시,, 아시는 분??

Chung Wan Park

unread,
Jan 27, 2010, 10:01:17 PM1/27/10
to ks...@googlegroups.com
모든 클래스는 생성자를 통해서 메모리에 로딩되지만, static 클래스의 경우에는 클래스 자체가 JVM 이 기동하면서 바로 
로딩을 시키게 됩니다.
interface나 abstract class의 경우에는 어떠한 형태로든 클래스가 생성되어진 이후에 해당 객체를 레퍼런스하게 됩니다.
따라서 로딩 시간이 한참 앞서 있는 static클래스에 대해서는 인터페이스나 abstract 클래스로의 구현이 불가한 거죠.
static class의 특정 메소드를 interface로 제공하기 위해서는, 인터페이스를 만든 후 별도의 클래스를 만들어서, 
해당 클래스의 메소드에서 직접 static class의 메소드를 호출하게 하는 구조로 가져가셔야 되지 않을까 싶네요.


2010년 1월 28일 오전 11:41, 고종봉 <mercu...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

One Bread

unread,
Jan 27, 2010, 11:03:23 PM1/27/10
to ks...@googlegroups.com
뭣 때문에 스태틱 메소드를 사용하고, 또 인터페이스를 미리 정의해서 그에 따라 구현하게 하려는지 모르겠습니다만 스태틱 메소드 대신 싱글톤 오브젝트의 메소드를 사용하게 하시는 것이 좋을 듯 하네요. 그러면 인터페이스도 적용할 수 있을테니까요.

2010/1/28 고종봉 <mercu...@gmail.com>

--

고종봉

unread,
Jan 27, 2010, 11:06:21 PM1/27/10
to ks...@googlegroups.com
음.. 이렇게 말씀 드리면 좀 이상할지도 모르겠지만,,

여차여차한 이유 때문에 getInstance 를 하지 않고도 바로 쓸수 있는 API를 생각하고 있습니다.

라이브러리처럼 만들어서 편리하게 가져다 쓸수 있도록요..

그래서 고안한게 static method이고,, 그 static method의 인터페이스를 미리 정의해보려고

한것입니다.

Util Class 들에 static method를 많이 사용한것과 비슷한 이유인것 같습니다.

여기에 대해서도 추가 의견 있으시면 말씀 부탁드립니다~


2010년 1월 28일 오후 1:03, One Bread <onebre...@gmail.com>님의 말:

박성철

unread,
Jan 28, 2010, 3:14:31 AM1/28/10
to ks...@googlegroups.com
2010-01-28 오후 1:06, 고종봉 쓴 글:

> 음.. 이렇게 말씀 드리면 좀 이상할지도 모르겠지만,,
>
> 여차여차한 이유 때문에 getInstance 를 하지 않고도 바로 쓸수 있는 API를
> 생각하고 있습니다.
>
> 라이브러리처럼 만들어서 편리하게 가져다 쓸수 있도록요..
>
> 그래서 고안한게 static method이고,, 그 static method의 인터페이스를 미
> 리 정의해보려고
>
> 한것입니다.
>
> Util Class 들에 static method를 많이 사용한것과 비슷한 이유인것 같습니다.
>
> 여기에 대해서도 추가 의견 있으시면 말씀 부탁드립니다~
>
뭔가 여기 저기에 쓰이는 로직인데 객체에 두기는 번거롭고 여기 저기서 가볍
게 가져다 쓰고 싶으신 것이군요.
그런데 특정 객체에 종속되는 건 싫고요.

일단 클래스 메소드(static method)를 인터페이스에 정의할 수 없냐는 생각은
조금 따져보면 논리상 모순이 있습니다.
클래스 메소드는 클래스의 인스턴스를 만들지 않고 쓰는 것인데 (물론 언어적
으로는 인스턴스를 만들고 써도 되지만 의미 없고 좋은 관례도 아니죠) 인터
페이스라는 건 그 걸 구현한 클래스의 인스턴스 없이 쓸 수 없는 거니까요.

결국 클래스에 종속 되더라도 클래스 메소드를 쓰느냐 아니면 인스턴스를 하
고 인터페이스를 통하도록 하느냐 둘 중에 한 방법을 써야 합니다.

이럴 때 DI를 쓰면 좋지만 getInstance를 말씀하신 것으로 봐서는 DI를 쓰지
않는 상황 같네요.

클래스 메소드에다 로직을 구현해서 쓰다가 나중에 다른 객체로 로직을 옮기
고 클래스 메소드는 단지 이 객체로 위임하기만 하는 식으로 리펙토링을 할
수도 있으니 일단 클래스 메소드로 처리하는 것도 좋을 것 같습니다.


One Bread

unread,
Jan 28, 2010, 4:22:19 AM1/28/10
to ks...@googlegroups.com
라이브러리처럼 만들어서 편리하게 가져다 쓸수 있도록요..

그래서 고안한게 static method이고,, 그 static method의 인터페이스를 미리 정의해보려고

스태틱 메소드로 라이브러리처럼 편하게 가져다 쓰려고 하는데 인터페이스라는 거추장스러운 방법을 쓴다는 것이 모순 같네요.

그런데 인터페이스를 왜 쓰려고 하는지에 대해서는 전혀 설명이 없으시네요.

단지 싱글톤의 getInstance()가 하나 더 나오는게 귀찮으시면 싱글톤 안에 getInstance()를 내부에서 불러서 원하는 메소드를 사용하게 하는 스태틱 메소드를 하나 만드셔도 될 듯 하네요. 하지만 인터페이스를 쓰기 위해서 이렇게 번거롭게 하는 것이 무슨 장점이 있는지 잘 모르겠어요.

2010/1/28 고종봉 <mercu...@gmail.com>
Reply all
Reply to author
Forward
0 new messages