본문 바로가기

분류 전체보기

(520)
[SOLID] 객체지향 설계 5원칙 - OCP OCP (Open Closed Principle) 개방 폐쇄 원칙 자신의 확장에는 개방되어 있고, 주변의 변화에 대해서는 폐쇄되어 있어야한다. 소프트웨어는 확장에 대해서는 개방되어야 하지만, 변경에 대해서는 폐쇄되어야 한다. - 로버트 C. 마틴 글로는 이해하기 힘들다. 개방 폐쇄의 원칙을 지키지 않고 있는 코드를 살펴보자. public class 아반떼 { public void 앞으로간다() {} public void 뒤로간다() {} } public class 쏘나타 { public void 앞으로간다() {} public void 뒤로간다() {} } public class 사람 { private 아반떼 차량 = new 아반떼(); } 만약 클라이언트인 사람이 차량을 바꾸게 된다면 코드가 어떻게 변..
[SOLID] 객체지향 설계 5원칙 - SRP SRP (Single Responsibility Principle) 단일 책임 원칙 클래스와 메소드는 하나의 역할만 해야한다. 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. - 로버트 C. 마틴 아래의 코드는 단일 책임 원칙을 지키지 않고 있는 코드이다. public class PublicTransport { public void 탑승문을연다() {} public void 하차문을연다() {} public void 하차벨을누른다() {} public void 목적지로이동한다() {} public void 트렁크에짐을싣는다() {} } PublicTransport라는 대중교통이라는 클래스다. 버스와 택시의 행위를 모두 모으다 보니 버스의 역할도 해야하고 택시의 역할도 해야한다. 단일 책임 원..
[OOP] 객체 지향 프로그래밍이란? - 다형성 다형성(Polymorphism) 하나의 객체가 여러가지 타입을 가질 수 있다. 하위클래스는 상위클래스로 참조될 수 있다. 역시 글로만 정리하니 이해가 되질 않는다. 아래의 코드를 보자. public class Vehicle { private String manufacturer; private String modelName; } public class Motorcycle extends Vehicle { private String engineName; private String fuelType; } public class Bicycle extends Vehicle {} Vehicle 클래스와 이를 상속하고 있는 Motorcycle이 있다. 그러면 사용하는 쪽의 코드를 확인해보자. Vehicle vehicle..
[OOP] 객체 지향 프로그래밍이란? - 추상화 추상화(Abstraction) 각자 다른 클래스들의 공통적인 부분들을 모아서 하나로 추출한다. 전혀 추상화가 되어있지 않은 아래의 코드를 살펴보자. public class Motorcycle { private String manufacturer; private String modelName; private String engineName; private String fuelType; public void run() { log.info("느리게 달린다."); } public void engineOn() { log.info("시동을 켠다."); } } public class Bicycle { private String manufacturer; private String modelName; public voi..
[OOP] 객체 지향 프로그래밍이란? - 상속 상속(Inheritance) 상위클래스를 확장한 하위클래스가 상위클래스의 기능을 그대로 사용 할 수도 있고 재정의 하여 사용할 수도 있다. 아래는 전혀 상속을 사용하지 않은 코드이다. public class Avante { private String manufacturer; private String modelName; private String modelSubName; public void run() { log.info("달린다."); } public void reverse() { log.info("후진한다."); } } public class Sonata { private String manufacturer; private String modelName; private String modelSubNa..
[OOP] 객체 지향 프로그래밍이란? - 캡슐화 캡슐화(Encapsulation) 하나의 클래스안에 관련있는 변수와 메소드를 하나로 묶는다. 데이터를 은닉화하여 외부에서의 조회 및 수정을 제한한다. 아래는 캡슐화가 되지 않은 코드다. public class Car { String manufacturer; String modelName; } void oopTest() { Car car = new Car(); car.manufacturer = "현대"; car.modelName = "쏘나타"; log.info("{}", car.manufacturer); log.info("{}", car.modelName); } 어디서든 멤버 변수에 접근할 수 있고 심지어 수정까지도 가능하다. 이런 식으로 개발을 하면 프로젝트가 커질수록 값이 변경되는 곳을 찾기 힘들어질 ..
[Grammer] & vs &&, | vs || 자바에는 AND 연산자에는 & 와 &&가 있다. OR 연산자 또한 | 와 || 가 있다. 이번에 해당 연산자들로 인해 서비스에 장애가 생기는 문제가 발생하였다. &, &&, |, || 연산자의 차이를 간단하게 알아보고자 한다. 크게 & 와 | 는 비트 연산자이고 && 과 || 는 논리 연산자이다. & 와 | 는 먼저 검증하는 결과의 결과와 무관하게 뒤에 검증하는 내용을 검증한다. && 는 먼저 검증하는 결과가 거짓이라면 더 이상 뒤의 내용은 검증하지 않는다. || 는 먼저 검증하는 결과가 참이라면 더 이상 뒤의 내용은 검증하지 않는다. 아래는 테스트를 위한 테스트 코드이다. public class OperatorTrainingTest { private static boolean operate(String..
[Core] 스프링 부트 프로젝트 생성 기본적인 스프링 부트 프로젝트를 생성한다. start.spring.io 로 접속하여 아래의 이미지와 같이 프로젝트를 생성한다. Project: Gradle Project Spring Boot: 2.5.0 (프로젝트 생성 시점에서 SNAPSHOT이 아닌 최신버전을 사용) Language: Java Dependencies: 이후에 필요에 따라 하나씩 추가할 예정이라 이번에는 추가 X 위의 이미지와 같이 프로젝트를 생성하고 IntelliJ를 사용하여 프로젝트를 열면 아래의 이미지와 같이 자동으로 필요한 라이브러리들이 설치되는 것을 확인할 수 있다. 실제로 설치된 라이브러리들이 확인하고 싶다면 화면 우측 상단의 Gradle(코끼리 이미지)버튼을 눌러 직접 확인할 수 있다. 그러면 정상적으로 스프링 부트를 통한 ..