분류 전체보기318 디자인 패턴 - 추상 팩토리 패턴 추상 팩토리 패턴 추상 팩토리 패턴은 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴 팩토리 메서드 패턴 vs 추상 팩토리 패턴 객체 생성 과정을 추상화한 인터페이스를 제공객체 생성을 캡슐화함으로써 구체적인 타입을 감추고 느슨한 결합 구조를 표방 new로 직접 생성하는것을 막음 (private 생성자) 그래서 구체적인 객체의 타입을 감추고 인터페이스화 된 팩토리에 접근해서 객체를 생성하는것은 두 패턴의 공통점이다. 차이점 팩토리 메서드 패턴은 한 팩토리당 한 종류의 객체 생성을 지원 한다 예를 들어 버튼 팩토리가 있으면 A버튼 , B버튼 ,C버튼과 같이 버튼이라는 추상클래스를 상속받은 버튼 .. 자바/기본 2024. 3. 15. git 롤백, git branch,pull request,fetch,rebase git 롤백 - git revert, reset 커밋을 되돌리기위해 사용하는 명령어는 revert, reset 두가지이다. git reset git reset은 커밋 history 자체를 뒤로 돌린다. ( 돌아갈 커밋으로 되돌린다.) git reset # 커밋 history를 이전으로 되돌린다. 로컬에만 커밋이 머물러 있거나, 원격 저장소에 push를 했어도 나만 사용하는 게 확실한 브랜치라면 reset을 써도 상관없다. 하지만 다른 사람들과 공유하고 있는 브랜치라면 서로의 커밋 history가 달라지기 때문에 서로를 위해서도 하지 않는 게 좋다. 원격 저장소에 올라간 커밋을 reset 하면? 원격 저장소에 올라간 커밋을 되돌리면 원격 저장소와 로컬 저장소의 커밋 history가 다르기 때문에 push .. git/git 연습 2024. 3. 13. 자바 - 상속 상속 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있고 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 쓸 수 있는것이 상속이다. 상속을 하는 이유는 이미 만들어진 클래스를 재사용해서 새로운 클래스를 만들기 위함이다. 효율적이고, 개발시간을 줄여준다. 상속받은 모든 필드,메소드를 자식클래스에서 사용할 수 있는것은 아니다. - 부모클래스의 private 접근제한자를 가지는 필드 및 메소드는 자식이 물려받을수없다. - 부모와 자식클래스가 서로 다른 패키지에 있다면 부모의 default 접근제한자를 가지는 필드와 메소드에 접근할 수 없다. - 그 이외의 접근제한자를 가지는 필드와 메소드는 모두 상속의 대상이 된다. 부모 생성자의 호출 - super(...); 자바에서 자식 객체를.. 자바/기본 2024. 3. 11. 자바 - 클래스 (내부클래스-인스턴스 클래스,static 클래스) 내부 클래스(= 중첩클래스,Inner클래스) 내부 클래스(inner class)란 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 보통 사용자 클래스 자료형이 필요하면, 메인 클래스 외부에 선언하거나, 따로 독립적인 클래스 파일을 만들어 불러와 사용해 왔다. 내부 클래스는 대신 클래스 내에 선언되어 사용되며, 내부에 정의된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 우리가 어느 클래스에 변수나 상수가 필요하다면 클래스 멤버로서 클래스 내에서 선언하여 사용해 왔듯이, 선언 주체를 변수에서 클래스로 바꾼다면 그것이 내부 클래스인 것이다. 이처럼 내부 클래스는 보통 두 클래스가 서로 긴밀한 관계가 있거나, 하나의 클래스또는 메소드에서만 사용되는 클래스일 때 이용되는 기법이라고 보면 된다. p.. 자바/기본 2024. 3. 6. 1 - Git 기초 Git Init - git 저장소 생성하기 Git으로 버전 관리를 하고 싶은 디렉토리로 이동 후 git 저장소를 생성해준다. cd 경로명 원하는 디렉토리로 이동 후 git status 명령어를 통해 현재 위치에 이미 Git저장소가 생성되어있는지 확인합니다. git status git init git init 명령어를 실행하면, 현재 디렉토리를 기준으로 Git 저장소가 생성됩니다. 다시한번 git status를 해보면 git remote 방금 생성한 로컬 git 저장소를 github의 원격 저장소(리포지토리)와 연결하고 싶을때 사용하는 명령어 github에 리포지토리 생성후 Code 버튼을 눌러서 HTTPS의 링크를 복사해줍니다. git remote add 별칭 복사한url 위의 방법 혹은 git remo.. git/git 연습 2024. 3. 6. 자바 - 배열 , 제어문 배열 배열이란? 배열(Array)은 자료구조 중 하나로, 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 방법이다. 배열은 인덱스(index)를 사용해 각 요소에 접근할 수 있다. 이러한 특징 때문에 배열은 데이터의 순서를 유지하고, 특정 위치의 요소에 빠르게 접근할 수 있는 장점이 있다. 배열(Array)의 장점 및 단점 장점 빠른 접근 배열은 인덱스를 사용하여 요소에 빠르게 접근할 수 있다. 인덱스를 알고 있다면 원하는 위치의 요소에 시간복잡도 O(1)에 접근할 수 있다. 메모리 공간의 효율성 배열은 연속된 메모리 공간에 요소를 저장하므로, 메모리 공간을 효율적으로 사용할 수 있다. 또한, 요소들은 순서대로 저장되기 때문에 인접한 요소들에 대한 캐시 지역성이 좋아 성능 향상에 도움을 줄 .. 자바/기본 2024. 3. 4. 11) 스프링 트랜잭션 이해 (2) 트랜잭션 AOP 주의 사항 - 프록시 내부 호출1 참고 여기서 설명하는 내용은 스프링 핵심원리 고급편 [13. 실무 주의사항 - 프록시와 내부 호출 문제]에서 다루는 내용과 같은 문제를 다룬다. 이렇게 한번 더 언급하는 이유는 그 만큼 실무에서 많이 만나는 주제이고, 많은 개발자들이 이 문제를 이해하지 못해서 고통받기 때문이다. 여기서는 트랜잭션 AOP에 관점에서 설명한다 @Transactional 을 사용하면 스프링의 트랜잭션 AOP가 적용된다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용한다. 앞서 배운 것 처럼 @Transactional 을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출해준다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객.. 인프런/스프링 DB 2편 2024. 2. 16. 10) 스프링 트랜잭션 이해 스프링 트랜잭션 소개 우리는 앞서 DB1편 스프링과 문제 해결 - 트랜잭션을 통해 스프링이 제공하는 트랜잭션 기능이 왜 필요하고, 어떻게 동작하는지 내부 원리를 알아보았다. 이번 시간에는 스프링 트랜잭션을 더 깊이있게 학습하고, 또 스프링 트랜잭션이 제공하는 다양한 기능들을 자세히 알아보자. 먼저 본격적인 기능 설명에 앞서 지금까지 학습한 스프링 트랜잭션을 간략히 복습하면서 정리해보자. 스프링 트랜잭션 추상화 각각의 데이터 접근 기술들은 트랜잭션을 처리하는 방식에 차이가 있다. 예를 들어 JDBC 기술과 JPA 기술은 트랜잭션을 사용하는 코드 자체가 다르다. JDBC 트랜잭션 코드 예시 public void accountTransfer(String fromId, String toId, int money).. 인프런/스프링 DB 2편 2024. 2. 15. 9) 데이터 접근 기술 - 활용 방안 스프링 데이터 JPA 예제와 트레이드 오프 중간에서 JpaItemRepositoryV2 가 어댑터 역할을 해준 덕분에 ItemService 가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService 의 코드를 변경하지 않아도 되는 장점이 있다. 고민 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 실제 이 코드를 구현해야하는 개발자 입장에서 보면 중간에 어댑터도 만들고, 실제 코드까지 만들어야 하는 불편함이 생긴다. 유지보수 관점에서 ItemService 를 변경하지 않고, ItemRepository 의 구현체를 변경할 수 있는 장점이 있다. 그러니까 DI, OCP 원칙을 지킬 수 .. 인프런/스프링 DB 2편 2024. 2. 15. 7) 데이터 접근 기술 - 스프링 데이터 JPA 스프링 데이터는 기본적인 crud 등 공통적인 부분을 만들어줘서 쉽게 데이터를 처리할 수 있는 걸 도와준다. 스프링 데이터 jpa, 스프링 데이터 redis같이 특정 기술에 대해서 더 특화된 기능을 가지는 것도 있다. https://spring.io/projects/spring-data 스프링 데이터 JPA 주요 기능 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 수많은 편리한 기능을 제공하지만 가장 대표적인 기능은 다음과 같다. [여기서는 간단하게 알아보고, 따로 데이터 jpa 강의에서는 자세하게] - 공통 인터페이스 기능 - 쿼리 메서드 기능 공통 인터페이스 기능 JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다. 공통화 가능한 기능이 .. 인프런/스프링 DB 2편 2024. 2. 15. 8) 데이터 접근 기술 - Querydsl Querydsl 설정 build.gradle dependencies 부분에 아래 코드 추가 //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" dependencies 스코프 밖에 아래 코드 추가 //Querydsl 추가, 자.. 인프런/스프링 DB 2편 2024. 2. 15. 6) 데이터 접근기술 - JPA JPA 시작 스프링과 JPA는 자바 엔터프라이즈(기업) 시장의 주력 기술이다. 스프링이 DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공한다면, JPA는 ORM 데이터 접근 기술을 제공한다 JPA는 스프링 만큼이나 방대하고, 학습해야할 분량도 많다. 하지만 한번 배워두면 데이터 접근 기술에서 매우 큰 생산성 향상을 얻을 수 있다. 대표적으로 JdbcTemplate이나 MyBatis 같은 SQL 매퍼 기술은 SQL을 개발자가 직접 작성해야 하지만, JPA를 사용하면 SQL도 JPA가 대신 작성하고 처리해준다 실무에서는 JPA를 더욱 편리하게 사용하기 위해 스프링 데이터 JPA와 Querydsl이라는 기술을 함께 사용한다. 중요한 것은 JPA이다. 스프링 데이터 JPA, Querydsl은 JPA.. 인프런/스프링 DB 2편 2024. 2. 8. 이전 1 ··· 4 5 6 7 8 9 10 ··· 27 다음