[ Spring ] @RequiredArgsConstructor란 ?
·
스프링 | 스프링 부트
📘 @RequiredArgsConstructor ?✅ final 필드나 @NonNull이 붙은 필드들에 대해 생성자를 자동으로 생성해준다 .✅ Lombok 라이브러리 에서 제공하는 어노테이션이다.  ⚒️ 코드 예시@RequiredArgsConstructor@Servicepublic class UserService { private final UserDao userDao; private final TransactionTemplate transactionTemplate;}final 필드, @NonNull 필드에 대해 생성자를 생성해주고이 생성자를 통해 의존성 객체를 자동으로 주입해준다.객체 주입 (Dependency Injection, DI) public UserService(UserDao us..
[ Spring ] @Transactional과 예시
·
스프링 | 스프링 부트
📘 @Transactional ?@Transactional 어노테이션을 사용하면, 해당 메소드에서 실행되는 코드가 트랜잭션 단위로 처리된다는 의미이다. ✅ 트랜잭션의 큰 특징 ( 롤백 )트랜잭션의 어노테이션을 사용시 시작될 때부터 끝날 때까지의 모든 데이터베이스 작업을 하나의 묶음으로 간주한다.묶음의 작업이 모두 성공적이면 커밋하고, 하나라도 실패하면 모두 취소(롤백)해야 한다는 보장을 제공한다. ⚒️ @Transactional 코드 예시 @Transactional public void createAndUpdateUser(String name, String email, String newEmail){ userDao.addUser(name, email); if(true..
[ java ] 멀티 스레드 사용법
·
JAVA
📌 스레드와 멀티 스레드❓ 멀티 스레드하나의 프로세스 내에서 여러개의 스레드를 동시에 작업을 수행하는 것을 말한다.❓ 스레드프로세스 내에서 실제로 작업을 수행하는 최소 단위이며, 각 스레드는 독립적인 실행 흐름을 가진다. 📖  멀티 스레드 사용법자바에서 멀티스레드를 사용하는 방법은 2가지가 있다.Thread를 상속받는 방법Runnable 인터페이스를 구현하는 방법  1️⃣ Thread를 상속받는 방법 ⚠️ 자바는 다중상속을 지원하지 않아서, Thread를 상속받으면 다른 클래스를 상속 받을 수 없다.자바에서 스레드를 생성하는 가장 기본적인 방법은, Thread 클래스를 상속받는 것이다.상속받은 Thread 클래스의 run() 메소드를  오버라이드(재정의)한다.start() 메서드가 실제 수행 흐름을 ..
[ java ] 생성자, 생성자 오버로딩
·
JAVA
📌 생성자생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다. 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야한다.생성자는 어떤 값도 리턴하지 않는다.기본생성자는 디폴트로 아무 값(매개변수)도 받지 않는 생성자를 기본생성자라고 한다.사용자 명의 생성자를 하나 만든다면, 기본생성자는 만들어지지 않는다.이때 기본생성자를 사용하려면, 명시적으로 작성하면된다. 기본생성자 public class Car { // 디폴트 생성자가 자동 추가됨}Car c1 = new Car(); 사용자 명의 생성자public class Car{ String model; //생성자 public Car(String model) { this.model = model; // 객체 초..
[ java ] 추상클래스
·
JAVA
📌 추상 클래스추상 클래스 는 'is-a' 관계를 나타내는 상속의 한 형태로 사용되며, 상태(필드)와 행동(메소드)을 모두 포함할 수 있다.구체적인 인스턴스는 생성할 수 없으며, 추상 메서드를 포함할 수 있다.추상 클래스는 상속을 통해서만 사용할 수 있다.추상적 예시?새 → 참새, 비둘기 등동물 → 강아지, 고양이 등추상 클래스 목적 → 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함예기치 않은 인스턴스화나, 오버라이드의 미구현의 걱정이 없다. 📌 추상클래스의 제약1️⃣ 추상클래스는 new에 의한 인스턴스화가 금지 되어 있다아래와 같이 생성할 수 없다. → 인스턴스화 할 수 없다. public static void main(String[] args) { Person p..
[ java ]Constant Pool과 String Constant Pool
·
JAVA
📌 Constant PoolJVM의 Method Area 내부에 위치하고 있다.Constant Pool은 클래스를 컴파일할때 생성된다.컴파일 될때, 클래스 파일내에 포함된 클래스의 구성요소(상수, 문자열, 클래스)를 저장하고 관리한다.Constant Pool에 저장된 값들은 런타임 시점에 JVM에 의해 사용된다. 📌 String Constant Pool❓ String Constant Pool 또는 String Pool이라고 부른다.JVM의 heap 내부에 위치하고 있다.String Constant Pool은 Heap 영역 안에서 관리된다.런타임시점에 사용되는 메모리 영역이다.String test1 = "hello";String test2 = "hello";리터럴 사용시 String Constant ..
[ java ] 객체 상속
·
JAVA
📌 상속이란?✏️ 상속의 흐름설계를 하며 여러가지의 공통된 개념(또는 기능)들을 하나(상위 클래스)로 일반화할 수 있다. → 이것을 추상화 또는 일반화라고 한다.이러한 상위 클래스의 기능을 기반으로 새로운 특성을 추가하거나, 오버라이딩 하는 과정을 할 수 있다 → 이것을 확장이라고 한다—> 이러한 과정을 상속이라고 한다.아래 사진처럼 다중 상속 불가능java는 단일상속이 가능하지만, 다중 상속이 불가능하다.A, B 부모 객체가 있을때 C 자녀는 두개의 부모 객체를 가질 수 없다.하지만 직계 상속은 가능하다A의 부모가 B일때, C는 B를 조상으로 가질 수 있다 = (직계)C는 B의 기능도 사용이 가능하다. 📌 상속의 특징🔥 용어 정리업캐스팅: 부모 타입으로 변환(자동,암묵적)다운캐스팅: 자식 타입으..
[ java ] 메서드의 매개변수로 Object? (Object - toString())
·
JAVA
📌Object자바에서 extends 키워드로 다른 객체를 상속받지않으면, java.lang.object 클래스를 상속한다.결국 object는 모든 클래스의 조상 클래스라고 생각하면된다.코드 예시object는 모든 객체의 조상이라 어떤 타입이든 받을 수 있다.형변환을 통해서 사용한다.instanceof를 통해 실제 객체가 무엇인지 확인해야 한다. (안전성 높임)class Person extends Object{ String name; public void getName(){ System.out.println(name); }}public class Test2 { public static void test(Object object){ //Object 어떤 타입이든 받을 수 ..
[ java ] 객체지향 프로그래밍(클래스, 생성자, 메서드, 필드)
·
JAVA
📌 객체지향 프로그래밍(OOP)❓객체지향 프로그래밍 (Object-Oriented Programming, OOP)물리적으로 존재하거나, 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별이 가능한 것물리적 : 자동차, 사람추상적 : 학과, 강의객체는 속성(field) + 동작(method)으로 구성되어져 있다.객체란 ?Ex 학과(객체) = field속성 : 강의, 담당 교수동작 : 강의 평가, 학생 등록Ex 사람(객체) = method속성 : 이름, 나이동작 : 웃다, 울다객체지향 프로그래밍은 이러한 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법이라고 생각하면 된다.  📌 객체 간의 관계❓객체는 개별적으로 사용이 가능하지만, 대부분 다른 객체와 상호작용을 한다.1️⃣ 집합..
[ java ] Random, Math.Random
·
JAVA
📌 Math.radom()❓최상위 클래스인 Object 클래스 안에 있으므로 Import 시켜주지 않아도 사용이 가능하다.0.0 이상 1.0 미만의 double형 난수를 생성한다.시드(seed) 값을 직접 설정할 수 없다.시드 값이란 생성 초기 값으로, 생성 시작점을 말한다.Math.Random() 시드 값은 현재 시간을 사용한다.double형이 return 되기 때문에, 정수 사용을 위해서는 원하는 정수 크기 만큼 곱셈을 해주어야 한다.1. (int)(Math.random()*10) //0~9사이 정수2. (int)(Math.random()*10000)%10 //0~9사이 정수//1번 사용을 더 권장 ❗ (int) 캐스팅은 소수점을 반올림하지 않고 버린다.  📌 Random()❓ java.util...