개인 자료란 (JE)

  서버 커뮤니티

Profile FUCKDEV 대표칭호 없음
Profile

커뮤니티 소통 개발하기 잡담

기능 구현을 잘하는 건, 코딩 실력과는 상관이 없습니다.

2022.12.08 조회 수 897 추천 수 0

오랜만에 한마포 개발자 커뮤니티 구경해봤는데 거슬리는 표현들이 종종 보였습니다

"JAVA 마스터"  "JAVA가 그렇게 어렵진 않다" <- ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이렇게 표현 하는 사람들은 나이가 어리시거나 100% 자바로 Swing이나 플러그인 밖에 다뤄보지 못한 사람들이에요.

혹여나 본인이 이 글에 부정적인 생각이 든다면,  다른 사람들이 이용하고 반응이 좋으며  확장에 유연한  본인이 만든 프레임워크를

가지고 와보세요. 


코딩을 잘한다는 건 "원하는 기능을  구현할 수 있는 능력"이 아닙니다 이건 모든 프로그래머가 갖춰야 할 기본 베이스이며

다른 사람이 보기에도 코드가 복잡하지 않고 기능 확장에 유연하며, 단위 테스트를 통해 본인의 코드를 확실히 검증과 스스로 리팩토링 할 수 있는 사람들이

잘하는거죠


나는 어느정도 일까? 궁금한 분들을 위해 문제 하나 낼게요!


Q: 싱글톤을 확실히 보장하며, 테스트에도 유연한 코드를 작성해보세요


이 문제를 푸신 분은 아마 자바에 진심일 확률이 매우 높습니다.









11개의 댓글

qsef1256
2022.12.09
class TestObj {

  private static TestObj instance;

  private final String data;

  private TestObj(String data) {
    this.data = data;
  }

  public static TestObj getInstance(String parameter) {
    if (instance != null) {
      return instance;
    }
    synchronized (this) {
      instance = new TestObj(parameter);

      return instance;
    }
  }

}

synchronized 를 잘 써본 적이 없어서 틀릴지도 모르겠네요

FUCKDEV
2022.12.09
@qsef1256

스스로 작성하신 코드가 어느 상황까지 싱글톤을 보장하는지

그리고 단위 테스트를 유연하게 할 수 있는지 설명과 증명할 수 있으면 정말 진심인 분으로 인정합니다.

qsef1256
2022.12.09
@FUCKDEV

일단 리플렉션 까지 올 꺼라고는 생각 못한 건 사실이네요, 그거 쓸 실력이면 이걸 우회 하는 데 무슨 위험이 따르는지도 모를 리 없기 때문에 크게 신경 쓰지 않았어요

님 말 듣고 찾아봤는데 그냥 기본 생성자에 throw InstantiationError 던지면 되네요, 하나 알아가는 바이구요

단위 테스트를 유연하게 실행할 수 있게 하는데 제일 중요한 건 의존성 주입이라고 생각하네요. 그래야 자유자재로 의존 되는 코드를 바꿀 수 있고, Mocking 이 가능하죠

class TestObjTest {
  @Test
  void test() {
    TestObj testObj = TestObj.getInstance("data");

    assertEquals("data", testObj.getData());
  }
}
idkNick
2022.12.09
public class ExampleObject {

    private static ExampleObject instance = new ExampleObject();
    
    private ExampleObject() {
    }
    
    public static ExampleObject getInstance() {
        return instance;
    }

    public void testHello() {
        System.out.println("Hello World!");
    }
}

 


FUCKDEV
2022.12.09
@idkNick

리플렉션에 의해 싱글톤이 깨지는 코드이며 테스트에 유연하지 못한 코드입니다.

idkNick
2022.12.09
@FUCKDEV
public class TestObject {

    private static TestObject instance;
    private TestObject;

    public static synchronized TestObject getInstance() {
    if (instance == null) {
        instance = new TestObject();
    }
    return instance;
  }
}

synchronized 딱 한번 써봐서 기억도 안나네요 ㅋㅋ

qsef1256
2022.12.09
@FUCKDEV

근데 애당초 리플렉션 은 어쩔 수 없는 게 사실 아닌가요, 얘는 final 붙여도 무시할 수 있잖아요.

FUCKDEV
2022.12.09
@qsef1256

ENUM을 이용한 싱글톤 객체는 리플렉션에도 안전합니다.

FUCKDEV
2022.12.09
@qsef1256

ENUM을 사용하지 않고 일반 클래스도 리플랙션에 의해 깨지지 않는 싱글톤을 보장할 수 있습니다.

signition
2022.12.11

저는 모든 프로그래머가 갖춰야 할 기본 소양을 갖추지 못했군요.. 넘므 슬픕니다..

스크립터쟁이
2022.12.19
@signition

ㄱㅊ 기능구현만해도 반은 감 ㅋㅋ

뉴스 및 창작물
/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4