본문 바로가기

Java95

[Java] 타입 변환과 다형성 인터페이스의 다형성 다형성을 구현하기 위해 필요한 2가지 : 메소드 재정의와 타입 변환 상속과 마찬가지로 인터페이스에서도 이 두 가지 기능이 제공됨 상속과 차이점 : 상속은 같은 종류의 하위 클래스 생성, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술 인터페이스의 다형성이 필요한 이유 : 소스 코드의 변함 없이 구현 객체를 빠르고 쉽게 교체하기 위해서이다 이를 통해 구현 객체를 쉽게 교체하여 실행 결과가 다양해져 인터페이스의 다형성을 이루게 됨 자동 타입 변환 [인터페이스] [변수명] = 구현객체; // 자동 타입 변환 추가로, 인터페이스 구현 클래스를 상속한 자식 클래스가 만들어졌다면 그 자식 객체 역시 인터페이스 타입으로 자동 타입 변환 가능하다. 자동 타입 변환을 이용하여 필드나 매개변수의 .. 2022. 12. 6.
[Java] 인터페이스(Interface) 인터페이스(Interface) 인터페이스는 추상 메서드만을 가질 수 있고 구현메서드는 가질 수 없는 일종의 추상 클래스 추상 클래스와 다른 점은 자식 클래스들의 기능 유사도다. 추상클래스는 서로 비슷한 기능을 하는 클래스들을 묶을 때 사용하며, 인터페이스는 서로 다른 기능을 하는 클래스들을 묶을 때 인터페이스를 사용 극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것이 바로 인터페이스의 역할이자 개념 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 인터페이스를 사용 인터페이스는 100% 다형성 보장 부모 클래스가 인터페이스이면 자식 클래스가 무조건 구현되어야 한다. 즉 부모 인터페이스의 모든 메서드들을 자식 클래스에서 반드시 재정의되어야 하기 때문에 다형.. 2022. 12. 5.
[Spring] 스프링 프레임워크(Spring Framework) 스프링 프레임 워크를 말하기 앞서 프레임 워크(Framework) 프레임워크는 프로그램의 기초를 구축할 수 있는 코드의 집합 개발자라는 직업은 각 개발자의 능력에 따라 결과물의 완성도가 천차만별이기 때문에, 이를 극복하고자 하여 나온 결과물이 프레임워크다. 프레임워크를 사용한다면 프로그램의 기본 뼈대와 틀을 정하고, 모든 팀 구성원들이 이 틀과 뼈대에 맞게 살을 붙이기 위해 코드를 작성 스프링 프레임워크(Spring Framework) 하나로 딱 정의하기는 힘들지만 가장 잘 정의된 표현은 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크 라고 생각한다. Java를 기반으로 한 프레임워크. 복잡하지 않고 경량화 된 애플리케이션 프레임워크 한국의 공공기관 웹 서비스 개발 시, .. 2022. 12. 4.
[Spring] 제어의 역전 IoC(Inversion of Control)와 bean 제어의 역전 IoC(Inversion of Control) 구현 객체가 프로그램의 제어 흐름을 스스로 컨트롤하는 것은 개발자 입장에서는 당연한 자연스러운 흐름이지만 외부에서 관리하는 것을 제어의 역전이라한다. 프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞지만 내가 작성한 코드가 직접 제어의 흐름을 담당하면 그것은 라이브러리 한마디로, 스프링 프레임워크가 프로그램을 제어하는 것을 제어의 역전이라 한다. 프로그램의 진행 흐름과 구체적인 구현을 분리시킬 수 있다. 개발자는 비즈니스 로직에 집중할 수 있다. 구현체 사이의 변경이 용이하다. 객체 간 의존성이 낮아진다. 의존성은 쉽게 말해 어떤 객체가 사용해야 할 객체라고 할 수 있고, 이것을 직접 new 등을 써서 만들어 쓰면 .. 2022. 12. 4.
[Spring] 의존관계 주입(Dependency Injection), 의존성 주입, DI DI를 알기 전 의존관계에 부터 말하자면 의존관계 의존 대상 B가 변하면, 그것이 A에 영향을 미칠 때 A는 B와 의존관계라 한다. 쉽게 말해 B가 변경되었을 때 그 영향이 A에 미치는 관계 피자 가게의 요리사는 피자 레시피에 의존한다. 만약 피자 레시피가 변경된다면, 요리사는 피자를 새로운 방법으로 만들게 된다. 레시피의 변화가 요리사에 미쳤기 때문에 요리사는 레시피에 의존한다라고 할 수 있다. public class PizzaChef{ private PizzaRecipe pizzaRecipe; public PizzaChef() { this.pizzaRecipe = new PizzaRecipe(); } } PizzaChef 객체는 PizzaRecipe 객체에 의존 관계 이러한 구조는 문제점들이 있다. .. 2022. 12. 4.
[프로그래머스/알고리즘] 모의고사 (자바/Java) 문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작.. 2022. 12. 2.
[Java] 추상 클래스, 메소드 Abstract Class(추상 클래스) Abstract Class란 구체적이지 않은 Class를 의미한다. ex) 독수리, 타조는 구체적인 새를 지칭하는데 새, 포유류 같은 것은 구체적이지 않다. 주로 클래스들의 공통되는 필드와 메소드를 정의한 클래스를 말한다. 이런 것을 구현한 클래스를 Abstract Class = 추상클래스라고 한다. 또 어떻게 본다면 완성되지 않은 설계도라고도 한다. 특징 예를 들어, Animal 클래스가 추상클래스라면 아래의 코드는 동작하지 않는다. 자바는 추상 클래스의 직접적 객체 생성을 차단하기 때문 Animal animal = new Animal(); // ERROR 형식 이러한 추상클래스는 abstract 키워드를 통해 선언 abstract class Animal { /.. 2022. 12. 2.
[Backend] API 패턴 - 레이어드 아키텍처 패턴 아키텍처 시스템 목적을 달성하기위해 시스템의 상호작용등의 시스템디자인에 대한 제약 및 설계 최적화를 목표로 두고 시스템 구성과 동작원리 그리고 시스템의 구성환경등을 설명 및 설계하는 청사진 또는 설계도 레이어드 아키텍처 Multi-tier 아키텍처 패턴이라고도 하는 레이어드 아키텍처는 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어서 구성하는 패턴 백엔드 API 코드에 가장 널리 적용되는 패턴 중 하나 Spring, SpringBoot 프로젝트 진행 시, 코드 분리/관리에 대한 방법론 애플리케이션 구성 요소들을 수평으로 나눠서 관리함 프레젠테이션, 비즈니스, 퍼시스턴스, 데이터베이스로 나눠짐 수평적으로 나누었다는 것은 무엇일까 ? 아래의 그림처럼 레이어로 나눠 놓은 것들을 하나의 클래스, 하.. 2022. 12. 1.
[프로그래머스/알고리즘] 로또의 최고 순위와 최저 순위 (자바/Java) 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. .. 2022. 11. 30.