객체를 다루는 다양한 방식 (with Java)

이번글에서는 객체지향언어, 특히 자바에서 객체를 다루는 다양한 방식에 대해서 알아봅니다. 1. Object References 객체(Object)를 생성해서 사용하려면, 언어에서는 필연적으로 변수에 객체를 담아야합니다. 이 변수에 담기는 것은 객체를 참조(Reference)하는 주소값입니다. 이를 Object Reference라고 부르고, 객체를 다루는 언어에서 객체를 사용하는 방법입니다. 간단한 영화 예제를 살펴보겠습니다. // Movie Object public class Movie { private String title; private String directorName; private int runningTime; // 생성자 생략 } // Object Reference Movie movie = new Movie("오펜하이머", "크리스토퍼 놀란", 180); 생성한 Movie 객체는 메모리 어딘가에 저장이 될 것이고, movie 변수는 이 저장된 메모리의 시작 주소값을 할당받습니다....

December 11, 2023 · parker1609

MyBatis 필드 및 파라미터 매핑 (with. Spring Boot)

이 글은 Spring Boot 환경에서 MyBatis를 사용할 때, 기본적인 조회 결과의 매핑에 대해 정리한 글이다. 이 글에 나오는 예제는 이 링크에서 확인할 수 있다. Spring Boot 3.1.3 Java 17 mybatis-spring-boot-starter 3.0.2 mybatis 3.5.13 H2 Database 0. 예제 소개 매핑 테스트를 위한 간단한 영화(Movie) 예제를 살펴보자. 영화에 대한 정보를 저장하고 조회하는 서비스이다. 이 서비스의 ERD는 간단히 다음과 같이 만들어보았다. Movie에 대한 DB 스키마는 다음과 같이 표현할 수 있다. (H2 Database 기준)...

August 27, 2023 · parker1609

자바 웹 기술 역사

1. CGI (Common Gateway Interface) World Wide Web(WWW)은 초기에는 데이터가 동적으로 변하는 것에 대한 생각은 하지 않아 정적인 페이지 위주로 개발이 되었다. 시간이 흘러 웹은 점점 더 많은 데이터를 보여주도록 변하였고, 사용자가 필요에 따라 바로바로 데이터를 보여주는 동적인 페이지에 대한 수요가 늘었다. 동적인 페이지의 예제는 요즘은 흔히 찾아볼 수 있다. 웹 화면 사이드에 여러 광고가 보인다거나, 게시글이 보여지고 내가 보고 싶은 게시글을 검색한다거나, 댓글을 다는 등의 행동은 모두 동적인 페이지에서 이루어진다....

February 26, 2023 · parker1609

Java 11 vs Java 17

1. 지원기간 https://www.oracle.com/java/technologies/java-se-support-roadmap.html 자바 11버전은 최대 2026년 9월까지 지원 자바 17버전은 최대 2029년 9월까지 지원 2. Java 11 VS 17, 주요 변경사항 아래 예제 코드의 전체는 https://github.com/programming-starter/java-17-starter 이 링크에서 확인할 수 있습니다. Text Blocks 문자열을 좀 더 읽기 좋게 표현할 수 있게 되었다. 특히 JSON과 같은 문자열을 표현할 때, 예전에는 다음과 같이 표현해야 했다. { "name": "parker", "age": 30, "job": "Programmer" } @Test void old_style() { var json = "{\n" + " \"name\": \"parker\",\n" + " \"age\": 30,\n" + " \"job\": \"Programmer\"\n" + "}"; System....

February 24, 2023 · parker1609

동적 프록시(Dynamic Proxy) with Spring Framework

디자인 패턴 글 중 프록시 패턴과 데코레이터 패턴에서 프록시를 코드로 구현하는 방법을 알아보았다. (이전 글 참고) 그런데 프록시를 적용해야 할 클래스가 수십 개에서 수백 개가 되면 어떻게 될까? 이러한 프록시 클래스를 그 개수만큼 반복해서 만들어주어야 한다. 이러한 불편함을 해소하기 위해 나온 기술이 동적 프록시(Dynamic Proxy)이다. 동적 프록시는 말그대로 동적인 시점(런타임 시점)에 프록시를 자동으로 만들어서 적용해주는 기술이다. 자바에서 대표적인 동적 프록시 기술은 JDK 동적 프록시와 CGLIB(Code Generator LIBrary)이 있다. 두 기술 모두 동적 프록시를 만들어주지만, 차이점은 다음과 같다....

September 4, 2022 · parker1609

[디자인 패턴] 프록시 패턴/데코레이터 패턴

이 글은 디자인 패턴에서 유사한 패턴인 프록시 패턴과 데코레이터 패턴에 대해 알아본다. 두 패턴은 사실 ‘프록시(proxy)’를 사용하는 패턴이다. 프록시의 뜻은 ‘대리자’라는 뜻인데, 뜻처럼 어떤 일을 대신 해주는 역할을 한다. 프록시는 소프트웨어 환경에서 다양한 곳에서 활용되는 용어인데, 근본적인 기능은 크게 2 가지로 나뉜다. 접근 제어 권한에 따른 접근 차단 캐싱 (캐싱되어 있는 값은 접근할 필요가 없으므로, 캐시는 접근 제어의 역할) 지연 로딩 부가 기능 추가 값 변경 로깅 필터링 … 프록시 패턴과 데코레이터 패턴은 둘 다 프록시 개념을 사용하지만, 의도에 따라 나뉜다....

August 25, 2022 · parker1609

[디자인 패턴] 템플릿 메서드 패턴/전략 패턴/템플릿 콜백 패턴

이 글은 GOF 중에서 의도가 거의 유사하지만, 구현 방식이 조금씩 다른 3 가지 패턴을 알아본다. 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴이다. 이 3가지 패턴은 변경이 자주 발생하는 코드와 그렇지 않은 코드를 분리하는 것이 핵심이다. 여기에 객체지향의 다형성(또는 상속)을 이용하여 변경이 자주 발생하는 코드를 유연하게 대처하도록 한다. 패턴을 설명하기 위해 한 가지 예제를 바탕으로 각각의 패턴이 어떻게 구현되는지 살펴보자. 전체 예제 코드는 이 링크에서 볼 수 있습니다. 예제 - 문자 알림 전송 기능 개발자 파커는 애플리케이션에 문자 알림을 전송하는 기능을 추가하는 작업을 맡게 되었다....

August 19, 2022 · parker1609

Call by Value vs Call by Reference

C++과 Java를 공부하면서 헷갈렸던 것 중 하나가 call by value와 call by reference입니다. 흔히 Java가 call by reference가 가능한지에 대해 의견이 분분한 것을 보았습니다. 저도 이부분이 헷갈리기 시작하여 두 언어의 차이점에 대해 생각하며 결론을 내보았습니다. 이는 주관적인 생각이 포함되어 있으므로 의견이 다르거나 틀린 점이 있다면 지적 부탁드립니다! 먼저 결론부터 말씀드리면, Java는 call by reference를 할 수 없다고 생각합니다. 이에 대한 근거는 call by value부터 차근차근 살펴보면서 말씀드리겠습니다. Call By Value Call by value는 원본 값을 그대로 복사하여 매개변수로 전달하는 것입니다....

March 4, 2020 · parker1609