728x90
반응형

Java 27

SOLID 원칙

📌 SOLID 원칙 객체 지향적으로 설계하는데에 있어 기본이 되는 SOLID원칙에 대해서 알아보자. SOLID는 각 원칙의 첫번째 글자를 따서 만든 것이다. 단일 책임 원칙 (Single responsibility principle; SRP) 개방-폐쇄 원칙 (Open-closed principle; OCP) 리스코프 치환 원칙 (Liskov substitution principle; LSP) 인터페이스 분리 원칙 (Interface segregation principle; ISP) 의존 역전 원칙 (Dependency inversion principle; DIP) 이 원칙들이 서로 다른 내용이라 하기에는 밀접하게 연관되어 있으므로 한꺼번에 같이 이해해야 할 것이다. 📌 단일 책임 원칙 객체 지향은 책임..

Java 2022.08.06

연산자

연산자, 조건문 정리 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 산술 연산자(Arithmetic Operator) 산술 연산자는 사칙연산을 다루는 연산자로, 가장 기본적이면서 가장 많이 사용되는 연산자 중의 하나. 산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 결합 방향은 왼쪽에서 오른쪽이다. 연산자 설명 + 더하기 연산 수행(문자열 연결 가능) - 마이너스 연산 수행 * 곱하기 연산 수행 / 나누기 연산 수행(정수형은 몫 연산자) % 나머지 연산 수행 int result = 1 + 2; System.out.pri..

Java 2022.08.06

[Java] 데이터타입, 변수, 배열

2주차 주차마다 원래 관리를 해주어야 하는 스터디 이지만 이미 끝났으므로 공부하면 바로 포스팅을 할 계획이다. 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언 및 초기화하는 방법 변수의 스코프와 라이프타임 타입 변환, 캐스팅 그리고 타입 프로모션 1차 및 2차 배열 선언하기 타입 추론, var primitive 타입 종류와 값의 범위 그리고 기본 값 자바의 변수 타입에는 primitive와 reference 타입 두가지가 있다. 프리미티브 타입의 경우 정수, 실수, 그리고 논리값 으로 이루어져있다. 이 변수의 타입들의 범위는 조금만 생각해보면 왜 저렇게 정해져있는지 알 수 있다. 연관성은 바로 이진수의 제곱 의 범위 이다. 1bit 당 가질수 있는 경우..

Java 2022.08.06

JVM

정리하는 겸 유튜브 백기선님 자바 스터디를 보며 다시 상기시키는 공부를 진행한다. 이미 정식 스터디는 끝났지만 늦게 시작하여 블로그에 따로 기록하려고 한다. 📢 1주차 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 📌 JVM이란? JVM이란 Java Virtual Machine(자바 가상 머신) 의 줄임말 일반적인 프로그램은 OS위에서 실행되는데 자바 프로그램 같은 경우에는 OS위의 JVM에서 실행이 된다. JVM위에서 실행 시키는 이유는 OS에 상관없이 실행시키기 위해서이다. 각기 다른 운영체제에서 실행시키는 이점은 정말 좋다. 📌 JVM의 역할 자바 애플리케이션을 클래스 로더를 통해 읽어 ..

Java 2022.08.06

Effective Java 4장 요약

4장 클래스와 인터페이스 이펙티브 자바를 TDD, Clean Code 과정을 수강하면서 들으니 이해가 잘되면서 잘 읽힌다❗ 클래스와 멤버의 접근 권한을 최소화 ㅋㅋㅋㅋㅋㅋㅋㅋ 어제 Clean Code 과정에서 뼈저리게 겪었다... 랜덤값 부터 시작해서 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 차이는 클래스 내부 데이터를 각각 다른 외부 컴포넌트로부터 얼마나 추상화 하였는가가 결정 짓는다. 잘 설계되었다면 구현부, API를 깔끔하게 분리할 수 있다. MVC 패턴만 사용했어 분리하는게 조금 어려웠다. 그런데 진도 나가면서 점점 발전하는것 같다. 😁 이 챕터에서는 정보 은닉(캡슐화) 의 장점에 대해 설명하고 있다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발 가능하기 때문 시스템 관리 비용..

Java 2022.08.06

TDD Clean Code with Java 12기 3주차

포스팅이 늦었다. 3주차 미션인 사다리도 끝나게 되었다. 로또에서보다 난이도가 많이 올라간 느낌이었다. 리뷰어분이 빡세게 그리고 꼼꼼하게 해주신 덕분에 나 자체도 굉장히 성장한것 같다❗ 아래는 깃허브 PR 목록이다. 사다리 1주차 사다리 2주차 사다리 3주차 사다리 4주차 테스트 전체적으로 테스트코드를 고민하다가 한번 로직에 손을 대면 저절로 도메인 위주로 구현을 하게 되었다. 테스트를 항상 생각하면서 그리고 테스트를 실행함으로 인해 로직을 구현해 나가야 하는것이 조금 부족했던 챕터였다. 그래서 중간에 리뷰를 받다가 너무 로직이 답답해 보였다. 읽고있던 이펙티브 자바를 접목시켜서 조금 더 나은 로직으로 개선했다. 로직개선으로 문제를 겪었었는데, 그 문제가 바로 절차지향으로 개발했기 때문에 문제였다. 모든..

Java 2022.08.06

TDD Clean Code with Java 12기 2주차 피드백

테스트 코드 자동차 경주에 대한 라이브 피드백 시간인데 느낀점이 있어서 포스팅하게 되었다. 테스트 코드 비교할 경우 우리는 항상 getter, setter 메소드를 많이 써왔다. 그래서 나도 습관처럼 객체를 생성하고 비교를 할 경우에 아래와 같이 코드를 작성했었다. @Test void create() { Position actual = new Position(5); assertThat(actual.getPosition).isEqualTo(5); } 이런식으로 get 메소드를 사용해서 값을 비교를 했는데 이 방식은 잘못되었다기 보다는 get을 사용하지 않고 객체와 객체를 비교하는 방법을 사용하는 것이 오히려 객체지향적 측면에서 좋을 것 같다. 그렇게 Position 클래스에 equals() 와 hashCo..

Java 2022.08.06

TDD Clean Code with Java 12기 2주차

로또 2주차 미션은 로또 생성기였다. Step1 - 문자열 덧셈 계산기 Step2 - 로또(자동) Step3 - 로또(2등) Step4 - 로또(수동) 프로그래밍 요구사항이 점점 추가되어 조금 더 제한적인 상황에서 조건문을 사용해야 한다. 주차가 늘어가면서 느끼는것이지만, 테스트 주도 개발을 하게 되니까 안하던 방법이라서 손에 익지는 않았다. 그런데 완성되는 테스트를 먼저 구현하다 보니까 오류가 나는 상황에 대해서 더 생각하고 코드를 구현할 수 있게 되는것 같다. 이 과정을 진행하면서 이펙티브 자바도 같이 읽고 있다. 정적 팩토리 메서드는 이제 꼭 쓰게 되는것 같다.😁 꼭 쓰는것은 또 아니라고 생각해야되는데 일단 무분별하게 생성자로 객체를 생성할 수는 없게 만들어 놨다. 클래스 클래스 부분에서 좀 많은 ..

Java 2022.08.05

[JPA] 객체 지향 쿼리 심화

객체 지향 쿼리 심화 한번에 여러 데이터를 수정할 수 있는 벌크 연산이 있다. 벌크 연산 엔티티를 수정하려면 영속성 컨텍스트 변경 감지 기능이나 병합을 사용하고, 삭제하려면 em.remove() 를 사용한다. 데이터를 하나씩 처리하기엔 너무 오래걸려서 여러개를 동시에 처리할 수 있는 벌크연산이 있다. 벌크 연산은 executeUpdate() 를 사용한다. 이 메소드는 벌크 연산으로 영향을 받은 엔티티 건수를 반환한다. 주의사항 벌크 연산은 영속성 컨텍스트를 통하지 않고 바로 DB에 직접 쿼리를 날린다. 그래서 영속성 컨텍스트에 있는 엔티티와 DB에 있는 테이블의 칼럼 값이 다를 수 있는데, 그래서 이 부분을 주의하여야 한다. em.refresh 사용 엔티티를 사용해야 할 경우엔 DB에서 다시 조회한다. ..

Java 2022.08.05

Effective Java 1장

이펙티브 자바를 읽으면서 내 기술을 확장하고 싶었다. 그래서 부족한 부분은 채우고 앞으로의 개발에 적용해보려고 한다. 1. 객체의 생성과 파괴 생성자 대신 정적 팩토리 메서드를 고려하라 클래스는 클라이언트에 public 생성자 대신 정적 팩토리 메서드를 제공할 수 있다. 정적 팩토리 메소드가 생성자보다 좋은 장점 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 펙토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 단점 상속을 하려면 public이나 protected 생성자가 필요하니 정적 팩토리 메서드만 제공하면 하위..

Java 2022.08.05
728x90
반응형