
🤔 객체의 생성 // 클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언 // 변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장 Tv t; // t : 참조변수 t = new Tv(); // Tv 인스턴스 생성 후, 생성된 Tv 인스턴스의 주소를 t에 저장 ✅ 순서 클래스 작성 -> 객체 생성 -> 객체 사용 🤔 객체 배열 객체 배열 == 참조변수 배열 🤔 클래스의 정의 클래스 == 데이터 + 함수 🤔 변수란? 하나의 데이터를 저장할 수 있는 공간 🤔 배열이란? 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간 배열의 한계 : 같은 종류의 데이터만 저장할 수 있다. 🤔 구조체란? 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 ..

🤔 클래스의 정의 클래스란 객체를 정의해 놓은 것이다. 🤔 클래스의 용도 클래스는 객체를 생성하는 데 사용한다. 그럼 객체란 무엇일까? 🤔 객체의 정의 실제로 존재하는 것 사물 또는 개념을 의미한다. 🤔 객체의 용도 객체가 가지고 있는 기능과 속성에 따라 다르다. 객체의 구성 요소 - 속성과 기능 객체 = 속성(변수) + 기능(메서드) 🤔 객체와 인스턴스 객체 : 모든 인스턴스를 대표하는 일반적 용어 인스턴스 : 특정 클래스로부터 생성된 객체(예 : TV 인스턴스) 클래스 -------------------> 인스턴스(객체) 인스턴스화 그럼 오늘도 열공하자 🔥

🤔 객체 지향 언어 컴퓨터 프로그래밍의 한가지 기법으로 절차적 프로그래밍 방법과 대조되며 객체를 만들고 객체를 사용하는 프로그래밍 방법을 의미한다. 객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙) 객체 지향 언어의 장점 ❓ 코드의 재사용성이 높고 유지보수가 용이하다 중복된 코드를 제거할 수 있다. 즉, 프로그램을 데이터와 처리방법으로 나누는 것이 아닌 프로그램을 다수의 "객체"로 만들고 상호작용하는 방식이다. 명령어들로 이루어진 목록이 아닌 하나하나의 독립된 "객체"들의 그룹으로 생각하여 객체간의 메시지를 주고 받음으로서 연결하는 방식이다. 🤔 OOP 4대 핵심 개념 OOP (Object-Oriented Programming) : 객체 지향 프로그래밍 캡슐화 상속 추상화 ⭐ 다형성 ⭐ 다음 포스..

인프런 김영한 선생님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의에서 SQL 중심적인 개발의 문제점에 대해 학습한 내용을 정리한다. ✔ 연관관계 객체는 연관관계 시 참조 사용 : member.getTeam() 테이블은 외래 키 사용 : JOIN ON M.TEAM_ID = T.TEAM_ID 객체에서는 Team -> Member로 이동할 수 없지만 테이블에서는 Team에서 FK를 이용해 Member의 데이터로 가고 싶으면 member와 team을 조인해서 이동할 수 있다. ✔ ORM이란? 🤔 Object-relational mapping(객체 관계 매핑) 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터배이스대로 설계하면 ORM 프레임워크가 중간에서 매핑을 해주는 것을 의미 대중적인 ..

🤔 준영속 엔티티란? 영속성 컨텍스트가 더는 관리하지 않는 엔티티 📌 준영속 엔티티를 수정하는 2가지 방법 변경 감지 기능 사용 @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.setPrice(itemParam.getPrice()); //데이터를 수정한다. } 영속성 컨텍스트에서 엔티티를 다시 조회한 후에 데이터를 수정하는 방법 트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택 => 트랜잭션 커밋 시점에 변경 감지(Dirty Checking)이 동작해서 데이터베이스..

인프런 김영한 T의 실전! 스프링 부트와 JPA 활용1 강의를 들으며 연관관계 매핑 과정에 대해 정리한다. erd 설계 후 엔티티 매핑 과정시에 내가 참고할 용도로 제작하였다. 독자들도 erd 설계 후 이 방식에 맞춰 엔티티 클래스를 개발하면 될 것 같다. 바로 들어가보자. 📌 @--ToMany ✔ (mappedBy = "") 적용 ✔ 예시 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List orderItems = new ArrayList(); 📌 @--ToOne ✔ (fetch = LAZY) 적용 ✔ @JoinColumn(name="") 적용 ✔ 예시 @OneToOne(fetch = LAZY, cascade = CascadeTy..

오늘은 @Enumerated란 무엇이며 언제 어떻게 사용해야하는지 알아보자. 엔티티 매핑에서 Enum 타입을 사용할 때 @Enumerated 어노테이션을 사용하는데 우선 @Enumerated 어노테이션의 종류는 두 가지이다. ✔ EnumType.ORIGINAL : enum 순서(숫자) 값을 DB에 저장 ✔ EnumType.STRING : enum 이름 값을 DB에 저장 예시를 들어보자. 다음과 같은 enum 클래스에서 어노테이션의 종류가 EnumType.ORIGINAL이라면 ORDER ==> 1로 저장 CANCEL ==> 2로 저장된다. 어노테이션의 종류가 EnumType.STRING이라면 "ORDER", "CANCEL" 로 저장된다. ❌ 근데 EnumType.ORIGINAL은 함부로 사용할 수 없다. ..

오늘은 @Embedded는 무엇이며 언제 어떻게 사용하는지에 대해 알아보자. 바로 시작해보자. 🔥 회원 엔티티가 다음과 같다고 가정해보자. 회원 엔티티는 이름, 도시, 주소 번지, 주소 우편번호를 가진다. 이때 도시, 주소 번지, 주소 우편번호는 회원의 '주소'를 알기 위해 가지는 컬럼들이다. 이때 상세 데이터(도시, 주소 번지, 주소 우편번호) 또한 하나의 객체로 묶어 보다 객체지향적으로 설계할 수 있다. 도시, 주소 번지, 주소 우편번호를 주소라는 객체로 묶어 표현하면 보다 객체지향적인 코드가 될 것이다. 이때 사용하는 것이 @Embedded, @Embeddable이다. @Embeddable @Getter public class Address { private String city; private S..

엔티티 설계시 주의할 점에 대해 학습한 내용을 정리한다. 같이 알아보도록 하자. ✔ 엔티티에는 가급적 Setter를 사용하지 말자! - Setter는 변경 가능하기 때문에, 유지보수가 어렵다. ✔ 모든 연관관계는 지연로딩으로 설정하자! - 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될 지 추적하기 어렵다. 특히나 JPQL을 실행할 때 N+1 문제가 발생할 수 있다! @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이르모 직접 지연로딩으로 설정해야한다! ✔ 컬렉션은 필드에서 초기화하자. - null 문제로부터 안전하기 때문이다. 별 내용 없어 보여도 굉장히 중요한 내용이니 꼭 기억하자!! 그럼 오늘도 열심히 개발하자. 🔥

일반적인 웹 애플리케이션 계층 구조에 대해 알아보자. 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, ex.회원,주문,쿠폰 등 주로 데이터베이스에 저장하고 관리됨. 클래스 의존관계에 대해 알아보자. 🤔 MemoryMemberRepository를 사용하는 이유 => 개발 과정 중에 아직 DB가 정해지지 않았을때 memory 구조로 설계하고 나중에 DB 연결함.

이전 포스팅(글자클릭시 이동)에서 querydsl이란 무엇이며 왜 사용하는지에 대해 포스팅했으므로 이전 포스팅을 꼭 참고하기를 바란다. 캡스톤 프로젝트 중 '검색 기능' 을 위해 동적 쿼리를 사용하게 되었고 Querydsl을 설정하는 포스팅을 작성해볼까 한다. 바로 들어가보자. 😊 (queryDslVersion 5.0.0이후부터는 설정이 조금 달라졌다고 하는데 이 포스팅은 queryDslVersion 5.0.에 해당한다.) 1. build.gradle 파일에 다음과 같은 코드를 추가한다. 코드를 추가하고 실행시키면 build>generated>querydsl[main]에 Q로 시작하는 도메인들이 생긴다. Q로 시작하는 도메인들이 보인다면 제대로 한 것이다!! 😊 보이는 것과 같이 Q로 시작하는 도메인이 ..

오늘은 querydsl이란 무엇이며 왜 사용하는지에 대해 알아보자. JPA에는 쿼리 메서드의 기능과 @Query를 통해 많은 기능을 만들 수 있지만, 고정된 형태의 값을 가진다는 단점이 있다. 즉, 단순한 검색 조건을 만들어야 하는 상황에서는 충분히 사용가능하지만, 복잡한 조합을 이용하는 경우의 수가 많은 상황에서는 동적으로 쿼리를 생성해서 처리할 수 있는 기능이 필요하다. 📌 이때 Querydsl을 사용한다!! querydsl을 사용하면 복잡한 검색조건이나 조인, 서브 쿼리 등의 기능도 구현이 가능하다! Querydsl 공식 사이트

지난 포스팅에선 gradle을 이용한 스프링 프로젝트를 생성해보았다. 오늘은 생성한 프로젝트에 DB(mariadb)를 연결하고 추가로 프로젝트 설정을 진행해보자. 우선 mariadb를 설치한다. 1. Mariadb를 실행하면 나오는 세션 관리자에서 다음과 같이 세션을 등록한다. 2. 새로 생성한 세션으로 접속 후 마우스 우클릭 -> 새로 생성 -> 데이터베이스를 클릭한다. 3. IntelliJ 설정 IntelliJ의 build.gradle 파일의 dependencies에 다음과 같이 추가한다. 4. application.properties 파일에 다음 내용 추가하기 application.properties 파일에 다음과 같이 database를 연결한다. 🤔 서버를 실행해보자. 잘 동작하는 것을 볼 수 있..

오늘은 스프링으로 프로젝트 생성하는 방법에 대해 공부해보자. 필자는 gradle을 이용하여 스프링 프로젝트를 생성하겠다. 먼저 다음의 사이트에 접속한다. https://start.spring.io/ 사이트에 접속해 다음과 같이 옵션을 선택하고 GENERATE를 클릭한다. 생성된 zip 파일을 풀어 IntelliJ(통합개발환경)에서 해당 파일을 열면 된다. 다음과 같이 프로젝트의 구조가 생성되면 스프링 프로젝트의 생성은 끝이다. 다음 포스팅에선.. 지금 생성한 프로젝트를 바탕으로 DB 연결(mariadb) 및 기초 설정을 공부해보자. 그럼 오늘도 즐겁게 개발하자. 😊

개발을 하던 도중 DTO와 VO의 차이에 대해 궁금해졌다. 🤔 우선 DTO란? Data Transfer Object의 약자로 순수하게 데이터를 담아 계층 간으로 전달하는 객체이다. 로직 없이 순수하게 데이터만 전달하는 것으로써 getter/setter 메서드가 이에 해당한다. 🤔 VO란? Value Object의 약자로 특정 값 자체를 표현하므로 불변성을 보장하기 위해 생성자를 사용하여야 한다. VO는 값자체를 나타내므로 setter 같은 새로 값을 지정하는 메서드가 존재해선 안된다! (왜냐? 불변성을 보장해야하기 때문) 좀 더 쉬운 말로 DTO는 데이터를 담아 계층 간으로 전달한다. 값을 가져오고 (get) 전달해 지정한다.(set) 그럼 VO는 특정 값 자체를 표현한다. ✔ VO와 DTO의 차이점? ..
- Total
- Today
- Yesterday
- BAEKJOON
- LinkedList
- 정보처리산업기사 공부법
- Java
- 해커랭크 챌린지
- 정보처리산업기사
- 코드
- 백준
- challenges
- 자바
- 22 정보처리 산업기사
- 소스코드
- hackerrank
- 22 정보처리산업기사
- 나동빈
- 해커랭크 자바
- 그리디
- hackerrank challenges
- 자바의 정석
- 정보처리 산업기사
- stack
- 해커랭크
- 강의
- ORM
- 해커랭크 자바 챌린지
- 이코테
- JPA
- 챌린지
- queue
- 디버깅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |