본문 바로가기

DevelopmentTools/Java13

[Java] 객체 지향 설계 5원칙 - SOLID 원칙 JAVA를 사용한다면 객체지향에 대해서 한 번 쯤은 들어봤을 것이다. (ex. OOP 4대 특징 : 추상화, 상속, 캡슐화, 다형성)이러한 객체지향의 특징을 더 잘 사용하기 위해서 객체지향 설계(OOD) 원칙이 존재한다.그 중 5대 원칙을 나열하여 SOLID 원칙이라고 불리게 되었고 아래에서 이 5가지 원칙을 자세하게 알아보도록 하자.SOLID 원칙은 소프트웨어 설계에 있어 이해하기 쉽고 유연하며, 유지보수 및 확장이 편하다는 장점을 가지게 해준다.1. S (SRP)SRP (Single Reponsibility Principle) : 단일 책임 원칙하나의 클래스 및 메소드는 하나의 책임만 가져야 한다. 수정되어야 하는 이유 및 시기가 다르다면 그 클래스는 단일 책임 원칙이 적용되지 않은 .. 2024. 4. 19.
[Java] Java의 static 키워드는 상속이 불가능한 이유와 Hiding '켄트벡의 구현 패턴' 책을 다시 정독하던 날이었다.. 10장의 내용인 프레임워크 개발 패턴 읽다가 의문이 들어 작성하게 되었다 부모클래스의 static 메소드를 자식클래스에서 오버라이딩(Overriding)하지 못한다는 내용이었다. 즉, 정적 메소드는 오버라이딩 할 수 없다. 이 내용이 왜 그런지에 대한 개념이 제대로 잡혀있지 않는 것 같아 정리하고자 글을 작성한다 Dynamic Method Dispatch = 다이나믹 메소드 디스패치 메소드 디스패치: 어떤 메소드를 실행시킬지 결정하고 실행시키는 과정 Dynamic하므로 컴파일러가 어떤 메소드를 실행시킬지 모르기 때문에 런타임 과정에서 호출할 메소드를 선택하는 것이다. c.f) Static 메소드 디스패치도 있는데 가장 큰 예시론 자바의 main함수가.. 2024. 3. 28.
[Java] 객체지향 생활 체조 원칙 9가지 1. 한 메서드에 오직 한 단계의 들여쓰기만 한다. = 메서드의 깊이는 최대 1 즉, 맡은 일을 작게 가져가라. 깊이가 깊다면 그만큼 맡은 일이 많다(책임이 많다)는 의미이다. 이는 객체지향적이지 못하다는 의미와 같다. 2. else 키워드를 쓰지 않는다. -> 핵심은 `early return` 동시에 1번 규칙인 "깊이 제한은 1"까지 동시에 지키게 된다 문제코드를 한 번 보자 public class JamieObject { String JamieStatus(int hour, boolean isStudy) { String status = ""; if (hour > 4 && hour 4 && hour 정답은 "ㄴㄴ 마찬가지로 문제있음"이다. `early reeturn`의 목적은 "분기를 태우지 않는다"인.. 2024. 3. 9.
Object Mother 패턴이란? 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 프로젝트 기록용으로 TECH BLOG에 직접 작성한 글입니다. Object Mother패턴이란? 한 줄로 표현하면 “test Object를 만들어 주는 Class”이다. 테스트 데이터를 작성할 때 많은 예제 데이터가 필요한데 테스트 시점마다 새로운 데이터를 만드는 것이 비효율적인 task라고 생각이 들었고 이를 해결하기 위해 착안된 패턴이 “Object Mother 패턴"이다. 여러 테스트 클래스에서 유사한 데이터가 필요한 경우가 많아 테스트 시점에 standard fixtures를 만들 수 있는 factory object를 만드는 것이다. 장점 단점 재사용성이 증가한다 여러 테스트에 유사한 데이터를 사용하면 사용자들이 테스트 코드에 친숙해질 수 있다.. 2023. 12. 13.
[java] Transaction과 격리 레벨에 대해서 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 스터디 TL 과정으로 노션에 직접 작성한 글입니다. 트랜잭션(Transaction)이란? 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위 작업의 단위가 CRUD 문인가에 대한 의문이 들 수 있다고 생각한다. 게시판에서 작업의 단위를 나눈 예시를 들어보자! 게시판 사용자가 게시글을 작성하고 업로드 버튼을 눌러 업로드 다시 게시판으로 돌아와 게시판 목록에서 자신이 업로드한 게시글을 확인 1번은 Insert 질의 2번은 Select 질의 그럼, 작업의 단위가 Insert와 Select으로 2개인가요? 라고 말할 수 있겠지만 작업의 단위는 Insert와 Select 질의를 합친 행위로 1개 라는 개념으로 이해해야 한다 트랜잭션 특징 (ACID) .. 2023. 8. 15.
[java] Collections.sort override 구름 알고리즘 먼데이 2주차 3번 문제를 해결하며 java 답안은 제공이 되지않아 구글링을 하며 다른 분들의 코드를 참고하여 풀었다. 그러던중 다른 분의 코드를 보게되었다. 외부 클래스를 생성하고 새로운 클래스가 생겼으므로 Collections.sort 메소드를 오버라이드하여 새로운 정렬 메소드를 정의하는 방법을 보게 되었다. 람다식을 이용하여 해결하셨는데 기억에 꼭 남기고 싶어서 벨로그에 작성하게 되었다. Collections.sort(list, comparator); comparable은 this를 기준으로 비교하지만 comparator은 비교 대상을 2개로 두고 비교한다. int compareTo(T op1, T op2)로 두 객체의 특정값을 연산해서 음수라면 op1가 작은 것, 양수라면 op1가 .. 2023. 2. 10.
[java] 입력받는 방법 2가지 Java가 사용자로부터 입력받는 방법으로 크게 2가지가 있다 1. Scanner Scanner는 자료형이 자동으로 정해지기 때문에 입력받을 때 따로 형 변환을 할 필요가 없다. 공백과 줄바꿈을 모두 경계로 인식해서 입력을 받을 때 매우 용이하다. 이러한 편리함 때문에 대부분 입력을 받을 때 Scanner를 이용한다. Scanner 클래스를 사용하기 위해서는 import가 필요하다. Scanner 객체의 인자로는 System.in이 필요하다. System.in은 InputStream의 객체이다. 이때, InputStream은 콘솔 입력을 뜻한다. import java.util.Scanner Scanner sc = new Scanner(System.in); // 콘솔입력 2. BufferedReader 편리.. 2023. 2. 10.
[java] next(), nextLine() 차이점 한 개의 문장을 입력 받아 그 속에 가장 긴 단어를 출력하는 코딩테스트 문제를 풀던 중 알고리즘 적으론 문제가 없는데 계속해서 제출하면 오류가 났다. 그 오류의 원인은 문장을 Scanner로 입력받는 곳이었다. 바로, Scanner의 입력을 next()로 받아서 발생한 문제였다. nextLine()으로 고치니깐 문제는 바로 해결되었다. 항상 헷갈리던 이론이라 이 김에 확실하게 정리하고 넘어가려 한다. next(), nextLine() 공통점 String 타입으로 반환한다. Scanner 클래스의 메소드 next(), nextLine() 차이점 nextLine()은 Enter(개행문자)를 치기 전까지 쓴 문자열을 모두 반환한다. 한 줄 단위로 입력을 받기에 \n도 포함한다. 분리자 개행문자 \n이 버퍼에 .. 2023. 2. 3.
[java] 코딩테스트 문법 정리 Long 타입 to int 타입=> intValue 메서드 사용 Long x = 11L; int i = x.intValue(); substring 메소드 : 문자열에서 원하는 부분을 추출 할 때 사용 기본구조 문자열.substring(문자열 시작 번호, 문자열 끝낼 번호) 단, 끝나는 범위의 수는 포함되지 않는다. 즉 1번째에서 3번째까지 읽어들이고 싶다면 substring(1,4)로 해줘야 3번째까지 읽어들임. String str = "abcd"; System.out.println(str.substring(1,2)); // 결과: bc * 그 외에 문자열을 다루는 java 메서드 charAt, indexOf 참고: http://www.dreamy.pe.kr/zbxe/CodeClip/3766960 JAV.. 2022. 8. 31.