Java/Basics
-
객체지향 5대 원칙 :: SOLID 원칙Java/Basics 2021. 7. 18. 23:08
Single Responsiblity Principle (단일 책임 원칙) 객체는 단 하나의 책임만을 가져야 한다. Open-Closed Principle (개방-패쇄 원칙) 클래스, 함수 등의 소프트웨어의 설계 부품은 확장에는 열려있고 변경에는 닫혀있어야 한다. Liskov Substitution Principle (리스코프 치환 원칙) 하위 타입은 상위 타입으로 호환이 가능해야 한다. Interface Segregation Principle (인터페이스 분리 원칙) 인터페이스는 단 하나의 책임만을 갖도록 분리되어야 한다. Dependency Inversion Principle (의존 역전 원칙) 특정 모듈에 의존하지 말고 특정 모듈이 의존하게 하여, 소프트웨어 설계의 변경을 최소화할 수 있도록 해야 ..
-
stackoverflow 번역하기 :: static 메소드를 mocking 할 수 없는 이유Java/Basics 2021. 5. 19. 02:56
Link https://stackoverflow.com/questions/4482315/why-doesnt-mockito-mock-static-methods Question(발번역 주의) Static method는 왜 mocking 하기 어려울까? 그리고 PowerMock을 사용하면 static method를 mocking할 수 있는데, Mockito는 왜 불가능할까? Answer(발번역 주의) Mock 라이브러리는 런타임에 인터페이스를 구현하거나 해당 클래스를 상속하여 Mock 객체를 생성한다. 그런데 두 방법 모두 static method엔 작동하지 않는다. 왜냐하면 static method는 상속하거나 구현해서 사용할 수 없기 때문이다. static method를 mocking하는 유일한 방법은 런..
-
와일드카드 ? vs 정규 타입 매개변수 TJava/Basics 2020. 7. 22. 21:49
와일드카드 ? 와 정규 타입 매개변수 T의 차이를 살펴보자. ■Box 예제 먼저 Box라는 인터페이스와 Box를 rebox하는 메서드가 있다.public interface Box { T get(); void put(T element); } public void rebox(Box box) { box.put(box.get()); }rebox 메서드를 호출해본다고 생각해보자. 위 메소드의 호출부가 컴파일될 때, 매개변수의 와일드카드 타입이 결정된다. 그리고 box 내의 객체를 get 한 후 다시 push 한다. 별다른 오류가 없을 것 같지만 사실 다음과 같은 에러가 뜬다. Rebox.java:8: put(capture#337 of ?) in Box cannot be applied to (java.lang.Ob..
-
Java Thread(with Multi Thread)Java/Basics 2020. 6. 21. 20:29
■Thread란? 프로세스 내에서 실행되는 독립적인 흐름 단위. ■Thread 구현 방법 2가지 1. Thread class를 상속받는다. -> 다른 클래스를 상속받을 수 없다는 특징이 있다.public class ExtendedThread extends Thread { @Override public void run() { System.out.println("Thread를 상속받은 스레드 생성"); } }2. Runnable interface를 구현한 후 Thread class 생성자 매개변수에 넣는다. -> 구현하려는 클래스가 이미 다른 클래스를 상속하고 있을 때 사용한다.public class ImplementsThread implements Runnable { @Override public void..
-
같은 value 값을 가지는 String들의 hashcode가 같은 이유Java/Basics 2020. 6. 19. 13:31
같은 value 값을 가지는 String들의 hashcode가 같은 이유가 궁금해졌다. hashcode 대해 공부하던 도중 "test"와 new String("test")의 hashcode 값이 당연히 다를 줄 알았다. 왜냐하면 hashcode는 객체의 16진수 주소값을 10진수화 한 것이기 때문이다. "test"와 new String("test")는 저장되는 영역이 다르기 때문에 주소값도 다를 것이고 이에 따라 hashcode의 값도 달라야 한다는게 내 생각이었다. 하지만 결론부터 말하자면, 주소값은 다르지만 hashcode는 같았다. 왜 그럴까? ■hashcode 간단 설명 (String에서의 hashcode를 설명하기 위한 빌드업) 어떤 인스턴스는 주민등록번호와 같은 고유한 값을 가지고 있다. 그것..
-
메모리 주소만으로 Heap의 인스턴스에 접근할 수 있을까?Java/Basics 2020. 6. 17. 00:32
자바 스터디를 하던 중, 메모리 주소만으로 Heap의 인스턴스에 접근할 수 있을까? 라는 질문이 나와서 이에 대해 알아봤다. 결론은 접근할 수 없다 왜 그런지 살펴보자 ■개발자는 객체의 주소를 직접적으로 지정할 수 없다 개발자는 객체의 주소를 직접적으로 지정할 수 없다. 오직 간접적으로만 할 수 있다. 예를들어, String str = "hello"; 코드를 보면 "hello" 문자열의 메모리 주소가 str에 할당되고 있다. 이제 str은 메모리 주소를 갖게 된다. 그리고 String str2 = str; 코드를 보면 str이 가리키고 있는 주소가 str2에 할당되고 있다. "hello"라는 인스턴스를 복사하는 것이 아닌 "hello"의 주소를 복사하여 할당하는 것이다. 그러나 메모리 주소를 참조 변수에..