반응형 IT 개인 공부95 [Java] 상속(Inheritance) vs 위임(Delegation) 객체지향 프로그래밍에서 서로 연관된 객체들의 관계를 표현할 때 상속(Inheritance)과 위임(Delegation) 관계로 많이 표현한다. 디자인 패턴을 공부해보면 이들을 활용함으로써 보다 객체지향적인 설계가 가능해지는 장점이 있다. 하지만 이들은 각각 장단점이 존재하며 사용해야 하는 상황이 다르기 때문에 무분별하게 남용하게 되면 클래스 간의 결합도가 강해 지거나 의존성이 높아지는 등 오히려 설계에 어려움이 생기게 될 수도 있다. 따라서 이번 기회에 이들의 장단점과 차이점, 언제 사용해야 하는지에 대해서 알아보도록 하자. 상속(Inheritance) 상속은 is a 관계로 extends 키워드를 통해 부모의 속성들을 자식이 물려받아서 사용할 수 있도록 해주는 관계이다. 부모의 속성을 물려받기 때문에 .. 2021. 8. 22. 포워드 프록시(Forward Proxy) vs 리버스 프록시(Reverse Proxy) 프록시 서버의 종류에는 포워드 프록시(Forward Proxy) 서버와 리버스 프록시(Reverse Proxy) 서버가 존재한다. 이들을 알아보기전에 먼저 프록시(Proxy) 서버에 대해서 알아보자. 프록시(Proxy)는 "대리"를 의미한다. 그렇다면 프록시 서버는 무언가를 대신 수행해주는 서버라고 생각할 수 있다. 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 의미한다. 즉, 서버와 클라이언트 사이에 중계기로써 대리로 통신을 수행하는 친구가 바로 프록시 서버이다. 클라이언트 서버 사이에서 프록시 서버의 위치, 역할에 따라 포워드 프록시와 리버스 프록시로 나뉘게 된다. 포워드 프록시(Forward Proxy) 클라이언트.. 2021. 8. 21. [Java] Java에 포인터가 없는 이유 - 포인터(Pointer) vs 참조(Reference) C나 C++ 에는 포인터라는 개념이 존재하지만 Java에는 포인터라는 개념을 사용하지 않는다. 비슷한 개념으로 참조라는 것을 사용한다. 그렇다면 왜 Java에는 포인터가 존재하지 않을까? 그전에 포인터(Pointer)와 참조(Reference)의 차이를 간단하게 알고 넘어가자. 포인터, 참조 모두 주소를 통해 원본 데이터에 접근하는 공통 기능을 가진다. 다만, 포인터는 메모리를 직접 핸들링할 수 있지만 참조는 메모리를 직접 핸들링할 수 없다는 차이점이 존재한다. 포인터는 주소 값을 임의의 메모리 주소로 변경할 수 있다. 만약 개발자가 실수로 주소 값을 변경해버리면 segment fault 같은 문제가 발생할 가능성이 생기게 된다. 하지만 참조는 직접 메모리에 접근이 불가능하기 때문에 주소 값을 임의의 메.. 2021. 8. 20. SSR(서버 사이드 렌더링) vs CSR(클라이언트 사이드 렌더링) 렌더링(Rendering)이란 컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일(scene file)로부터 영상을 만들어내는 과정을 말한다. 따라서 웹 상에서의 렌더링은 서버로부터 받은 정보(HTML)를 브라우저 화면에 표현하는 것을 의미한다. 브라우저 화면을 의미하는 페이지는 정적 페이지와 동적 페이지가 존재한다. 정적 페이지는 누구에게나 동일한 화면을 보여주지만 동적 페이지는 사용자에 따라 다른 페이지를 보여줘야 한다. 간단한 예시로 로그인을 성공하면 해당 유저의 로그인 정보가 페이지에 나타나야 할 것이다. 따라서 사용자의 요청에 해당하는 페이지를 보여주기 위해 서버로부터 필요한 데이터들을 받아서 최종 HTML를 구성해야 한다. 이때 서버 or 클라이언트 중 누가 최종 HTML를 .. 2021. 8. 19. [Spring] 조회한 빈(Bean)이 모두 필요할때 처리하는 방법 이전 글에서 하나의 객체에 빈을 주입해야 하는데 조회한 빈(Bean)이 2개 이상일 경우 @Autowired 필드 명 매칭, @Qualifier, @Primary 3가지 방법을 통해 해결한다고 공부하였다. 그렇다면 조회한 빈이 모두 필요하다면 어떻게 해야 할까? 이는 Map이나 List 같은 자료구조를 활용하여 해결할 수 있다. 우선 테스트하기 쉽도록 두 종류의 Repository를 빈으로 등록해주는 AutoConfig 클래스를 하나 구현하자. @Configuration public class AutoConfig { @Bean public MyRepository jpaRepository() { return new JpaRepository(); } @Bean public MyRepository memory.. 2021. 8. 19. [Spring] 조회 빈(Bean)이 2개 이상일때 처리하는 방법 스프링 컨테이너에 빈을 등록하면 스프링 컨테이너가 알아서 의존관계를 맺어준다. 그런데 의존관계를 맺어줄 때 해당하는 타입의 빈이 2개 이상이라면 어떤 문제가 발생할까? 간단한 예시로 알아보도록 하자. 현재 MyRepository 인터페이스가 하나 있으며, 이를 구현하는 2개의 Repository가 있다. public interface MyRepository { } @Repository public class MemoryRepository implements MyRepository{ } @Repository public class JpaRepository implements MyRepository{ } 스프링 컨테이너에서 관리되는 컴포넌트에서 빈으로 등록된 MyRepository를 사용한다고 하자. @Au.. 2021. 8. 18. Forward와 Redirect 방식의 차이점 & PRG(Post/Redirect/Get) 현재 작업 중인 페이지에서 어떤 요청으로 인해 다른 페이지로 이동할 경우 Forward 방식과 Redirect 방식, 2가지 방식으로 페이지를 전환해준다. 두 방식의 공통점은 자신에게 요청이 왔을 때 자신이 처리할 수 없기 때문에 다른 URL에게 요청 처리를 위임한다는 점이다. 하지만 요청 처리를 위임하는 과정에서 차이점이 발생한다. 그렇다면 이 두 방식의 차이점은 무엇일까? 하나씩 알아보도록 하자. 1. Forward 방식 Forward 방식은 URL 1에게 요청을 보내게 되면 해당 요청을 자신이 처리할 수 없기 때문에 다른 URL 2에게 직접 위임하여 처리하도록 하는 방식 서버 내부에서 처리하기 때문에 초기의 Request, Response 정보를 유지한 채로 전송된다. 또한, 서버 내부에서 일어나는.. 2021. 8. 17. [Java] 가변인자(Varargs) Java에서 오버로딩(Overloading)이란 개념이 존재한다. 오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것을 의미한다. 만약 Varargs 클래스에서 String 타입의 매개변수를 1, 2, 3개씩 가지는 print() 메서드를 오버로딩한다고 해보자. 아마 다음과 같이 구현할 것이다. class Varargs { public void print(String s1) { System.out.println(s1); } public void print(String s1, String s2) { System.out.println(s1 + " " + s2); } public void print(String s1, String s2, String s3) {.. 2021. 8. 16. [Java] 명명 관습(Naming Conventions) 나는 프로그래밍을 할 때 변수, 메서드, 클래스 등을 선언할 때 일관성이 없고 그때그때마다 조금씩 다른 형식으로 선언하는 좋지 못한 습관을 가지고 있다. 이는 혼자 개발하는 데는 크게 상관이 없지만 협업 과정에서는 가독성이 상당히 떨어지기 때문에 의미를 이해하기가 난해해지고 오류 발생 가능성을 높일 수 있다. 이러한 문제점을 해결하기 위해서 언어마다 변수, 메서드 등의 이름을 다루는 명명 관습(Naming Conventions)이라는 것이 존재한다. 규칙(Rule)이 아닌 관습(Conventions)이기 때문에 반드시 지켜야 하는 것은 아니지만 이러한 관습을 유지함으로써 코드의 가독성을 높이며 오류 발생 가능성을 줄일 수 있기 때문에 불가피한 상황이 아니라면 명명 관습을 이행하는 것이 좋다. Java도 .. 2021. 8. 14. 이전 1 2 3 4 5 6 ··· 11 다음 반응형