분류 전체보기

    브릿지 패턴(Bridge Pattern)

    브릿지 패턴(Bridge Pattern) 브릿지 (Bridge) 의 사전적 의미 : 다리 구조물, 두 물체를 연결해주는 장치 다른 이름 : 핸들 / 구현부(Handle / Body) 브릿지 패턴은 추상적인 것과 구체적인 것을 분리하여 연결하는(Bridge) 패턴이다. 구현(implementation) 으로 부터 추상(Abstraction) 레이어를 분리하여 이 둘이 서로 독립적으로 변화할 수 있도록 하기 위함. 추상적인 것 : Abstraction - 기능을 처리(구성)하는 클래스. implementation을 이용하여 기능을 구성한다. 구체적인 것 : implementation - 실제 기능을 구현하는 클래스 - Abstraction에 의해 사용되어 진다. 기능을 처리(구성) 하는 클래스(Abstrac..

    예외 처리란

    예외 처리(Exception Handling) 프로그램 실행도중에 발생하는 에러는 어쩔 수 없지만, 예외(Exception)은 프로그래머가 미리 대처를 할 수 있다. 사용자의 원인으로 발생하는 예외는 개발자가 미리 대처를 해줄 수 있다. ​ 예외 처리(exception handling)란, 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드를 작성하는 것으로, 실행중인 프로그램의 비정상적인 종료를 막고, 상태를 정상상태로 유지하는 것이 목적이다. 예외처리의 목적 정의 - 프로그램 실행 시 발생할 수 있는 발생할 수 있는 예외에 대비한 코드를 작성하는것 목적 - 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는것 Error(에러클래스) 와 예외(Exception)은 모두 runtime 시에 ..

    자바가 제공하는 기본 예외들과 자주 사용하는 예외들

    자바가 제공하는 기본예외들 Arithmetic Exception 산술연산에서 예외 조건이 발생했을 때 발생 대표적인 / by zero ArrayIndexOutOfBounds Exception 잘못된 인덱스로 Array에 엑세스 했을 경우 발생. 인덱스가 음수이거나 배열 크기보다 크거나 같을 때 발생 ClassNotFoundException 정의한 클래스를 찾을 수 없을 때 발생하는 예외 FileNotFoundException 파일에 엑세수 할 수 없거나 열리지 않을 경우 발생 IOException 입출력 작업이 실패하거나 중단될 때 발생 InterruptedException Thread가 waiting, sleeping 또는 어던 처리를 하고 있을 떄 interrupt가 되면 발생하는 예외 NoSuchM..

    에러와 예외 (Error, Exception)

    오류(error) : 시스템에 무엇인가 비정상적인 상황이 발생한 경우. 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있는데 이러한 결과를 초래하는 원인. Java에서는 주로 JVM(Java Virtual Machine)에서 발생시키는 것이고, 예외(Exception)와 반대로 Application Code에서 잡아도 처리할 제대로 방법이 없다. OutOfMemoryError, ThreadDeath, StackOverflowError 등 에러는 발생 시점에 따라서 3가지로 분류할 수 있다. Compile Error (컴파일 에러) : 컴파일 할 때 발생하는 에러. syntax error(문법 오류)도 포함됨. - 컴파일 시 발생하는 에러 소스코드를 컴파일을 하면 컴파..

    객체지향 관점에서의 is-a, has-a

    객체지향 관점에서의 is-a, has-a 클래스 간의 관계를 설정할 때 상속 관계를 맺을 지 포함관계를 맺을 지 헷갈리는 경우가 있다. 상속관계 : extends로 상속을 받은 관계 포함관계 : 내부 멤버로 갖고 있는 관계 이 때, 클래스간의 관계를 is-a, has-a 로 생각을 하면 조금 더 명확하게 구성할 수 있다. is-a : A is B - A는 B이다 has-a : A has B - A는 B를 가지고 있다. is - a (IS - A, ~는 ~이다. ) is-a는 상속관계에서 사용하는 것이 가장 효율적이다. 상속을 사용하면 하위 클래스가 상위 클래스에 종속되기 때문에 이질적인 클래스 사이의 관계에서는 상속을 사용하지 않는것이 좋다. 코드를 재사용할 목적으로 서로 관련이 없는 클래스들을 상속관계..

    AuthenticationPrincipal Null - 주입받지 못하는 이슈

    AuthenticationPrincipal Null 이슈 - 주입받지 못함 결론부터 AuthenticationPrincipalArgumentResolver 가 빈으로 등록되지 않음. 빈으로 등록해줘야함 @EnableWebSecurity는 설정했고, @EnableWebMvc는 등록안했다가 등록하니 해결됌 spring boot version : 2.7.4 implementation("org.springframework.boot:spring-boot-starter-security:2.7.4") 스프링 시큐리티를 사용하였을 때, 사용자가 인증된다면 Controller 에서 파라미터로 @AuthenticationPrincipal 을 주입 받을 수 있다. @AuthenticationPrincipal 로그인한 사용자..

    Spring security - Role vs Authority (hasRole? hasAuthority?)

    Spring security - Role vs Authority (hasRole? hasAuthority?) Role과 Authority의 사전적 의미 Role : 역할 Authority : 권한 이 둘은 비슷하면서도 다르다. 역할은 커뮤니티 관리자가 권한을 그룹화하고 사용자 또는 사용자 그룹에 권한을 지정하는 방법을 제공한다. 권한은 커뮤니티에서 사용자가 수행할 수 있는 조치를 정의한다. 소규모 프로젝트에서는 Role이나 Authority 둘 중 한가지로 사용해서도 충분히 접근제어를 할 수 있지만, 규모가 커지고 요구사항이 복잡해진다면 역할과 권한을 분리하여 명시함으로써 유지보수성도 높아질 것이다. Spring Security는 메소드 수준에서 권한 부여 의미를 지원하는데, 이 둘이 차이가 있다. 또한..

    Java - double brace (생성과 동시에 초기화, 함수호출)

    Java double-brace (더블 브레이스) 사용을 주의하자 double brace initialization : 이중 중괄호 초기화 자바에서는 객체 생성 시 double breace initialization 을 이용하여 생성과 동시에 초기화 할 수 있다. 사실 자바에는 double breace initialization이란 것은 존재하지 않는다. 익명 클래스와 이니셜라이저 블록이라는 두 가지 기능이 함께 사용되어서 그렇게 보일 뿐이다. 그리고 생성과 동시에 함수 호출이 더 맞는 표현이다. Map map = new HashMap(){ { put(1, "영수"); put(2, "별이"); } }; Person person = new Person(){ { setName("영수"); } }; 이름에서도..

    Java - 객체 비교에는 Objects.equals()를 사용하자.

    자바에서 객체를 비교할 때는 객체.equals() 보다 Objects.equals 를 사용해서 비교하는것이 NPE(NullPointerException)으로 부터 안전하다. 먼저 객체의 비교에서는 동일성 비교(== 비교)와 동등성 비교(.equals())를 이용해서 비교할 수 있다. 동일성 동일성 (Identity) : 동일하다는 뜻 동등성 동등성 (equality) 다음과 같이 두 객체를 비교하는 경우가 있다고 하자. public void print(Text originText, Text otherText) { if (originText.equals(otherText)) { System.out.println("두 객체가 같다") return; } System.out.println("두 객체가 다르다")..

    Java - 동일성과 동등성 ( ==, equals() )

    동일성과 동등성 (Identity, Equality) 자바에서 객체를 비교할 때는 동일성과 동등성이 무엇인지 알고 비교해야 한다. 동일성(Identity) : 메모리 내 주소값이 같은지 비교한다. 동등성(Equality) : 논리 값, 같은 정보가 동등한지 비교한다. 동일성 동일성 (Identity) : 동일하다는 뜻 동일성은 동일하다는 뜻으로 객체 비교 시 두 객체가 완전히 같은 경우를 의미한다. 비교 대상의 두 객체가 가르키는 메모리 주소가 같은것을 의미한다 Member member1 = new Member("영수"); Member member2 = member1; 자바에서 메모리 주소를 비교하는 연산은 == 연산자로 확인할 수 있다. 변수는 stack영역에 생성되는데, 이 stack영역에 있는 변수..