전체 글(313)
-
[Java] main 메서드
main 메서드 Java를 처음 시작하면 클래스의 메서드를 실행시킬 때 main method를 사용합니다. 하지만 원리에 대해 오래 생각해본 적이 없다는 걸 최근에 발견했고 간단히 찾은 내용을 소개하려 합니다. Java main method는 Java 프로그램이 시작될 때 실행되는 포인트들입니다. 메서드 규약은 public static void main(String[] args)이며, Argument의 네이밍을 myStringArgs로 수정할 순 있어도 main이란 메서드명을 수정할 순 없습니다. 메서드를 하나하나 뜯어보면, public 접근 제어자는 java runtime 때 클래스 경로가 어디 패키지 내에 위치하든 실행할 수 있도록 접근 권한을 줍니다. static은 java runtime 때 클래스..
2022.01.15 -
[패캠강의] 빌더패턴
Builder 패턴 Builder 패턴 객체를 생성할 때 단계적 생성에 중점을 두는 패턴입니다. 동일한 생성 과정을 통해 다른 구현을 할 수 있다는 것이 큰 특징입니다. 객체 협력 예시 Builder : 인터페이스나 추상클래스 Concrete Builder : Builder를 구현한 클래스 Director : Builder를 사용해 Product를 생성 Product : 결과물 예제코드 MakeReport(Builder)를 textReport, HTMLReport 등으로 다양하게 구현할 수 있습니다. public interface MakeReport { String makeHeader(); String makeBody(); String makeConclusion(); String getReport(); ..
2022.01.15 -
[Java] Mac class
Javax.crypto.Mac 클래스 Mac class Javax Mac 클래스는 MAC(Message Authentication Code) 알고리즘 기능을 제공해줍니다. MAC은 서로 공유하는 secret key가 있을 때, 전송되는 정보의 유효성을 검증하고 요청에 대한 응답을 처리해주기 위해 사용됩니다. 따라서 MAC은 secret key를 기반으로 전송되는 데이터들에 대한 보안 기능을 한다고 볼 수 있습니다. MAC의 메커니즘은 암호화 해시기능에 기반하는데, 이러한 매커니즘을 HMAC이라고 합니다. HMAC은 어떤 해시기능 (e.g., SHA256, SHA384)과도 같이 사용하며, secret key와 조합해서 사용합니다. [위 내용은 아래 참고자료(Java docs)를 번역한 내용입니다.] 예제..
2022.01.13 -
[패캠강의] 프로토 타입 패턴
[패캠강의] 프로토 타입 패턴 복잡한 클래스의 인스턴스를 생성할 때 하나의 견본(prototype)을 만들어 초기화해두고 이를 복제해서 객체를 사용하는 방법입니다. (Java clone() 메서드라고 생각하시면 됩니다.) 예제코드를 보면 바로 이해할 수 있을 겁니다. 주의할 점은 Mark interface(override해야할 메서드가 없이 특성만 알려주는 인터페이스) Cloneable과 깊은 복사입니다. 참고로 Arrays.copyOf() 메서드도 깊은 복사를 채택합니다. //Arrays.copyOf() 메서드 docs, 새로운 배열을 만들어서 System.arraycopy 해줍니다. public static int[] copyOf(int[] original, int newLength) { int[] ..
2022.01.12 -
[객체지향코드] 캡슐화(Encapsulation)
캡슐화(Encapsulation) 객체 지향 코드를 얘기할 때 빠지지 않고 등장하는 용어중 하나입니다. 하지만 실무에서 많은 코드를 짜다보면 지나치기 쉬운 게 사실입니다. 책에서 두 가지 재밌는? 규칙을 설명해주고 있어서 소개해보려 합니다. 캡슐화 객체 지향 코드는 구현에 변경이 발생해도 다른 구현에 영향을 적게 준다는 장점이 있습니다. 캡슐화는 쉽게 설명해서 그런 객체 지향 코드의 장점을 살릴 수 있게끔 구현 변경에 유연함을 주는 방식입니다. 캡슐화를 위한 두 가지 규칙 Tell, Don't Ask 묻지말고 명령하라. 라는 첫 번째 규칙은 간단하게 말해 데이터를 가진 객체가 처리하도록 해라라는 얘기입니다. 예를 들어 age에 limit 기능을 두는 메서드가 있다면 데이터를 가진 객체에서 isAg..
2022.01.10 -
[Spring] Collection 타입을 생성자 방식으로 주입하기
클래스 인스턴스가 초기화 될 때, A 인터페이스를 구현하는 Bean들을 List로 받고 싶다면 아래와 같은 코드를 사용하시면 됩니다. public class CollectionInject { //생성자 주입 방식에서 생성자를 의존주입 생성자 하나만 사용한다면 @Autowired가 생략가능 합니다. 그렇지 않고 다른 새성자도 사용할거라면 @Autowired로 명시해줘야 Spring이 어떤 생성자가 의존주입 생성자를 인지합니다. @Autowired //Spring은 InterfaceA를 구현한 Bean들을 모두 listOfImplementationA 리스트에 add 해줍니다. public CollectionInject(List listOfImplementationA) { for (InterfaceA inte..
2022.01.05