본문 바로가기

자바

[Java] Call by Value와 Call by Reference [Java] Call by Value와 Call by Reference 프로그래밍 언어에는 Call by Value와 Call by Reference라는 개념이 있습니다. 함수, 또는 메소드에 파라미터를 넘겨주는 방식에 대한 개념인데요. Call by Value는 값에 의한 호출, Call by Reference는 참조에 의한 호출이라고 번역됩니다. 그럼 각각은 어떤 차이가 있을까요? Call by Value Call by Value는 메소드를 호출할 때, 인자로 넣어주는 변수의 값을 복사합니다. plusOne()이라는 이름의 숫자 num을 받는 메소드가 있다고 하겠습니다. 인자로 들어온 num에 1을 더하는 기능을 합니다. 다음 코드와 같이 plusOne() 메소드를 호출하면 어떤 일이 일어날까요? @.. 더보기
[디자인 패턴] 전략 패턴 [디자인 패턴] 전략 패턴 전략 패턴이란? 위키피디아에 따르면 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 디자인 패턴이라고 한다. 객체가 선택할 수 있는 행위, 즉 전략을 객체로 간주하여 캡슐화 해놓고 동적으로 변경할 수 있게 한다고 풀어쓸 수 있을 것 같다. 더 직관적으로 줄이면 행동을 객체로 만든다고 할 수 있을 것 같다. 사실 풀어썼다고 해도 이런 식으로는 잘 와닿지 않는다. 전략 패턴의 생겨나게 된 배경부터, 구체적인 사례까지 쭉 살펴보겠다. 전략 패턴은 왜 생겼을까? 미션: 게임의 직업 클래스를 만들자 전략 패턴의 가장 직관적인 예시는 역시 게임 캐릭터라고 생각된다. 새로 오픈하는 RPG 게임에서 캐릭터의 각 직업 클래스를 구현하게 됐다고 해보자. 구현해야 될 직업은 총 5개,.. 더보기
[JPA] N+1 문제 해결 [JPA] N+1 문제 해결 N+1 문제가 발생했다! 이력서 목적으로 웹사이트를 하나 띄워서 운영하고 있다. 오버스펙일 순 있겠지만 컨텐츠는 DB로 별도 분리해서 관리하고 있다. 처음 만들 당시에는 회사에서 JPA를 쓸 일이 없어 JPA로 만들어 봤는데, 딱히 공부를 했다기보단 이렇게 하니깐 CRUD가 되는군, 참 쉽다 요 정도로 사용만 했었다. 그리고 최근에 간만에 이력서 업데이트 겸 프로젝트 업데이트도 했는데 테스트 중에 문제를 발견했다. 컨트롤러 한 번 호출했는데, 쿼리가 몇 개가 나가는거지. 지금이야 JPA 공부를 한 번 해둔 상태라, 어떤 문제인지 바로 알 수 있었다. JPA를 조금만 찾아봐도 들어봤을 N+1 문제였다. N+1이란? 이건 사실 1+N 문제라고 하는 편이 정확하다. N+1이라 하면.. 더보기
[Java] 객체지향과 SOLID 객체 지향과 SOLID 소프트웨어 공학 내용이지만, 자바와도 연관성도 많으므로 자바 카테고리에 올리는 객체지향 정리. 객체 지향 객체지향은 컴퓨터 프로그램을 객체들의 모임으로 파악하고자 하는 관점. 각각의 객체는 데이터를 주고 받으며 협력한다. 프로그램을 유연하고 변경이 용이하게 만든다는 장점이 있다. 특징과 장점 특징 추상화: 현실세계의 개념을 반영하는 것. 객체들의 공통적인 특징, 데이터와 기능을 도출한다. ex) 요청한 계산을 수행하는 프로그램을 만든다고 했을 때, Calculator라는 이름의 클래스를 만든다. 실제 계산기라고 생각하고 기능을 구현한다. 인간의 사고방식과 프로그램의 동기화. 캡슐화: 객체의 역할을 수행하기 위한 하나의 목적을 위해 데이터와 기능들을 묶는 것 ex) Calculato.. 더보기
[Java] String의 equals()와 hashcode() [Java] String의 equals()와 hashcode() String 생성 방법 1. 리터럴 String a = "12345; 2. new 연산자 String b = new String("12345); 리터럴과 new 연산자 방식의 차이 리터럴로 생성된 객체는 String Constant Pool 영역에 존재 리터럴은 내부적으로 String의 intern() 메소드를 호출. intern()은 해당 문자열이 String Constant Pool에서 검색 후 주소값 반환 또는 생성 new 연산자로 생성된 객체는 Heap 영역에 존재한다. equals()와 ==의 차이 .equals()는 값 비교, ==은 주소값을 비교한다. hashCode 각 객체의 주소값을 변환하여 생성한 고유의 주소값 .equal.. 더보기
[Java] JVM Garbage Collector [Java] JVM Garbage Collector JVM, 자바 가상 머신이란? Java Virtual Machine 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램 메모리 관리, Garbage Collector 수행 GC, Garbage Collector란? 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지 및 해제 하는 기능 Stack 정적으로 할당한 메모리 영역 primative 타입의 데이터가 값과 함께 할당 Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당 Heap 동적으로 할당한 메모리 영역 모든 Object 타입의 데이터가 할당 Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당 GC 프로세스 MARK Stack의 모든 변수를 스캔하면.. 더보기
[Spring Boot] 스프링부트 어노테이션 정리 [Spring Boot] 스프링부트 어노테이션 정리 개인적 학습을 위한 스프링부트 어노테이션 정리 어노테이션이 포함된 최상위 패키지를 기준으로 분류 context @Bean 어노테이션이 붙은 클래스에서 리턴하는 객체를 Bean으로 등록한다. 사용되는 클래스에 @Configuration 어노테이션을 반드시 명시해줘야 한다. [MEMO] Bean은 스프링 IoC 컨테이너에 의해 인스턴스화, 관리, 생성되는 객체를 의미한다. @Configuration 해당 클래스에서 Bean을 생성함을 명시한다. 내부적으로 @Bean 어노테이션이 붙은 메소드를 사용한다. @Configuration public class SampleConfig { @Bean public SampleController sampleControll.. 더보기
[Java] 윈도우 이클립스 단축키 모음 한 번에 싹 정리하는 건 아니고, 필요할 때마다 찾아서 내가 사용하는 것들만 모아두기 위한 포스팅. For Windows Ctrl + F : 찾기 및 바꾸기 Ctrl + H : 워크스페이스 내 검색 Ctrl + D : 한 줄 삭제 Ctrl + W : 탭 닫기 Ctrl + L : 라인 이동 Shift + Enter : 한 줄 삽입(아래로) Ctrl + Shift + Enter : 한 줄 삽입(위로) Ctrl + Shift + R : 파일명 검색하여 열기 Ctrl + Shift + B : 브레이크 포인트 토글 Ctrl + Shift + L : Quick Search Ctrl + Shift + P : 메소드 괄호 {}의 대응값으로 이동 더보기