JAVA 7

JAVA 객체 지향 설계 [S.O.L.I.D]

의존선 관리는 우리 대부분이 직면한 문제인데, 의존성이 잘못 관리된다면 변경하기도 어렵고 재사용하기 어려운 코드가 된다. 반면 의존성이 잘 관리된 코드는 유연하고 재사용이 가능한 코드가 된다. 참고로 SOLID는 어떠한 특정 프로그래밍 언어 혹은 프레임워크를 위해 만든 원칙이 아니다. SOLID는 프레임워크도 라이브러리의 패턴도 아니며, 특정 기술에 국한되지 않는다. 그래서 객체지향을 프로그래밍 언어나 프레임워크에 원칙을 자유롭게 적용할 수 있다. 객체지향 4대 원칙 캡슐화 메서드를 통해서 간접적으로 노출 상속 상속이 적절한 경우는 다른 클래스의 메서드가 아닌 필드를 사용하고 싶을 때 사용 메서드 상속이 부적절한 이유는 대부분의 경우 리스코프 치환 원칙을 위반할 가능성이 높기 때문이다. 메서드를 쓸 때는..

JAVA 2023.10.11

JAVA 상속 extends [Interface, Inheritance]

1. Interface란 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 된다. 하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않는다. 하지만 다중 상속의 이점을 버릴 수 는 없기에 자바에서는 인터페이라는 것을 통해 다중 속성을 지원하고 있다. 인터페이스란 다른 클래스를 작성할 때 기보이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상클래스를 의미한다. 자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있다. 하지만 인터페이스(Interface)는 오로지 추상 메소드와 상수만..

JAVA 2023.10.10

JAVA 객체지향 관련 [Optional, if문, Getter/Setter]

10/10 화요일 1. 객체지향 관련 이론 및 문법 Optional 자바에서 null 처리를 쉽게 처리하기 위해 부가적으로 나온 자료형 public Optional 메서드명() { return Optional.ofNullable(자료); } 예외처리 코드를 간소화하게 사용할 수 있다. -> .orElseThrow(( ) -> new 예외클래스( )) Optional 객체를 만드는 정적 팩토리 패턴 메서드 명령어 Optional.of(자료); // 생성 시점에서 null이면 예외 발생 Optional.ofNullable(자료); // 생성 시점에서는 null여부 상관없지만 처리가 쉬움 Optional.empty(); // 빈 옵셔널 만들고 싶은 경우(거의 쓸 일 없음) JPA와 같이 Optional로 된 ..

JAVA 2023.10.10

JAVA 데이터베이스 연동 (2) [리포지토리, DAO 설계]

1. 리포지토리 인터페이스 설계 Spring Data JPA는 JpaReposiroy를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링 부트로 JpaReposiroy를 상속하는 인터페이스를 생성하면 기존의 다양한 메서드를 손쉽게 활용할 수 있다. 여기서 이야기하는 리포지토리는 Spring Data JPA가 제공하는 인터페이스이다. 엔티티를 데이터베이스의 테이블 구조를 생성하는 데 사용했다면 리포지토리는 엔티티가 생성한 데이터베이스에 접근하는 데 사용된다. 리포지토리를 생선하기 위해서는 접근하려는 테이블과 매핑되는 엔티티에 대한 인터페이스를 생성하고 JpaReposiroy를 상속 받으면 된다. JpaReposiroy를 상속받을 때는 대상 엔티티와 기본값 타입을 지정해야 한다...

JAVA 2023.08.29

JAVA 데이터베이스 연동 (1) [ORM, JPA, 영속성 컨텍스트, 엔티티]

애플레케이션은 데이터(리소스)를 주고받는 것이 주 목적이다. 엔터프라이즈급 애플리케이션에서 정상적으로 로직이 동작하기 위해서는 데이터베이스가 꼭 필요하다. 1. ORM (Object Relational Mapping) ORM은 객체(클래스) 관계 매핑을 의미한다. 자바와 같은 객체지향 언어에서 의미하는 RDB(Relational Databse)의 테이블을 자동으로 매핑하는 방법이다. 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재한다. ORM은 이 둘의 불일치와 제약사항을 해결하는 역할이다. ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있다. 1.1 ORM의 장점 - ORM을 사용하면서 데이터베이스 쿼리를..

JAVA 2023.08.29

[문제풀이] 백준 JAVA - #10988 팰린드롬인지 확인하기

문제 알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오. 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다. 입력 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. 출력 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다. 예제 입력 1 복사 level 예제 출력 1 복사 1 예제 입력 2 복사 baekjoon 예제 출력 2 복사 0 내가 작성한 코드 import java.util.*; public class Main { public static voi..

JAVA 2023.07.19

[문제풀이] 백준 JAVA - #10807 개수 세기

문제 총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다. 출력 첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다. 예제 입력 1 복사 11 1 4 1 2 4 2 4 2 3 4 4 2 예제 출력 1 복사 3 예제 입력 2 복사 11 1 4 1 2 4 2 4 2 3 4 4 5 예제 출력 2 복사 0 코드 import java.util.Scanner; public class Main { public static voi..

JAVA 2023.07.17