본문 바로가기

Java

(22)
[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..