어떠한 값이나 객체가 동등한지 비교할 때 우리는 == 연산자 또는 equals() 함수를 사용한다. 먼저 이 둘의 차이점을 알아보자. 1️⃣ == 연산자 동등 비교 연산자로, boolean 타입인 true / false 를 반환한다. 만약 두 피연산자의 값이 같다면 true, 다르면 false 를 반환한다. 두 객체의 메모리 공간이 같은지 확인하는 참조 비교 방식이다. 모든 타입에 적용할 수 있다. public class Main{ public static void main(String[] args){ { System.out.println(1 == 1);//true System.out.println(2.3 == 2.2);//false System.out.println('a' == 'b');//false ..
1️⃣ DI (Dependency Injection) DI (Dependecy Injection) 는 "의존성 주입" 이라는 뜻이다. 저번에 공부했던 SOLID 에 등장한 OCP, DIP 등을 지킬 수 있도록 스프링이 지원해주는 기능이다. 즉, new 연산자를 통해 직접 구현 객체를 생성하는 것이 아닌, 외부에서 객체를 생성한 뒤 주입시켜주는 방식이다. 여기서 말하는 외부는 스프링 컨테이너를 말한다. 예를 들어 'MemberRepository' 라는 인터페이스가 있다고 하자. 그 아래에 'MemoryMemberRepository', 'JdbcRepository' 등이 구현 객체로 있다. 그렇다면 MemberRespository 를 생성할 때 어떤 객체에 의존하면 될까? 여기서 DI 를 적용하기 위해선 둘..
개요 자바의 정석 연습문제를 처음부터 풀어보며 모르거나 헷갈리는 기본 개념을 확실히 익히고자 한다. 연습문제를 풀이하는 것이 아닌 내가 공부하면서 중요하다고 생각하거나 잘 몰랐던 개념을 기록할것이다. 문제 [2-3] : 리터럴, 변수, 상수, 키워드의 개념 1. 리터럴 (literal) : 소스 코드 내에서 직접 입력된 값, 종류에 따라 정수, 실수, 문자, 논리 리터럴로 나뉜다. 이는 상수 (constant) 와 같은 의미지만, 상수는 한 번 저장하면 변경할 수 없는 변수로 정의하다는 점에서 구분된다. 2. 변수 (variable) : 변수는 값을 저장할 수 있는 메모리의 공간을 의미한다. 이는 프로그램 내에서 수시로 값이 변경될 수 있다. 또한 변수에는 복수 개의 값이 아닌 하나의 값만 저장할 수 있..
클래스 (Class) 클래스는 객체 지향 프로그래밍에서 설계도와 같은 역할을 한다. 현실 세계에서 어떤 물건을 만들기 위한 설계도가 필요하듯이, 클래스는 객체를 정의하고 만드는데 필요한 설계도이다. 클래스에는 객체를 구성하는 멤버가 명시된다. 구성 멤버로는 필드 (field), 생성자 (constructor), 메소드 (method) 가 있다. 필드 (field) : 객체의 고유 데이터, 상태 정보 등의 속성을 가진다. 선언 형태는 변수와 비슷하다. 생성자 (constructor) : 객체 생성시 초기화를 담당하며, 오버로딩이 가능하다. 메소드 (method) : 객체의 동작을 나타내며, 특정 기능을 수행할 수 있다. 기본 구조는 다음과 같으며, 파일 이름과 동일한 이름의 클래스에만 'public' 을 ..
1️⃣ 개요 인프런 김영한님의 '실전! 스프링 부트와 JPA 활용 1' 편을 듣다가 MemberRepositoryTest 도중 발생했다. 데이터베이스 연결하는데에 문제가 있었는지 한참을 찾아봤다. 처음에 커뮤니티를 다 뒤져봐도 해결이 안되길래 전전긍긍하다가 우연히 발견한 방법을 해결했다. 기분 날아갈듯 진짜? 보니까 나처럼 비슷한 오류가 발생한 사람이 많은 것 같은데 시도했던 몇 가지 해결법을 작성하겠다. 우선 나는 build.gradle 과 application.yml 파일부터 다시 확인해봤다. 2️⃣ 해결 방법 1) build.gradle [1] dependencies 우선 build.gradle 파일에서 dependencies를 보면 대부분 자동으로 추가됐겠지만, h2 데이터베이스 관련 내용이 없는..
1️⃣ SOLID 란? SOLID 는 Robert C. Martin 이 2000년대 초반 명명한 객체 지향 프로그래밍 및 설계의 5가지 기본 원칙을 Michael C.Feathers 가 소개한 것이다. 이는 객체 지향 프로그래밍에서 중요한 원칙으로 자리잡았으며, 프로그래머가 소스 코드를 읽기 쉽고 확장하기 쉽게 될 때까지 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 'SOLID' 라는 이름은 5가지 원칙인 SRP, OCP, LSP, ISP, DIP 의 각 첫 글자를 따서 지어졌다. 즉, SOLID 는 좋은 객체 지향 프로그램을 설계하도록 하는 원칙인 것이다. 각 원칙은 다음과 같다. SRP (Single Responsibility Principle) : 단일 책임 원칙 ..
1️⃣ 개요 백엔드 개발에 사용되는 언어와 프레임워크는 정말 다양하다. Python - Django, JS - Node.js, Java - Spring 등 여러 종류가 있다. 물론 자신이 재미있고 잘 맞는 언어와 프레임워크를 선택하여 공부를 하는게 일반적이다. 나는 지금까지 공부하면서 Java 에 큰 흥미를 느꼈다. 그래서 코테 준비도 비교적 널리 사용되는 Python 이나 C++ 로 하려다 마음을 바꾸었다. 그래서인지 자연스럽게 나는 Java -> Spring 으로 공부 방향을 잡았다. 사실 처음에 Spring 이라는 거대한 프레임워크를 공부할 때 어디서부터 시작해야될지, 나에게 맞는지조차 몰랐다. 광고는 아니고 김영한님의 무료 스프링 강의를 보고 웹서비스의 전반적인 흐름을 배웠다. 아무래도 익숙한 J..
다시 초심으로 돌아가 자바의 기초부터 깊게 공부해보자는 생각으로 연산자를 공부했다. 사실 제일 기초가 되는 문법이자 중요한 내용이나, 자세히 보지 않고 대충 넘긴 적이 많다. 처음부터 공부한다는 것에 의아할 수 있겠으나, 아직은 공부하기 여유로운 기간이기 때문에 이참에 자바에 대해 깊게 파볼 생각이다. 물론 현재 Spring 강좌를 듣고 있고, DB 등을 병행하여 공부하고 있지만 자바가 가장 중요하다고 생각했다. 모든 내용을 기술하진 않을 예정이다. 단지 내가 공부하여 새로 알게 된 내용이나 중요하다고 생각되는 내용 위주로 작성할 것이다. 1️⃣ Operator & Expressions 연산 (Opration) : 프로그램에서 데이터를 처리하여 결과를 산출하는 것 연산자 (Operator) : 연산에 사..