🔠 프로그래밍언어

    Java :: 객체지향 5대 설계 원칙 - SOLID

    Java :: 객체지향 5대 설계 원칙 - SOLID

    객체지향 설계 5대원칙 결합도를 낮추고 응집도를 높일 수 있는, 객체지향적 설계 관점에서 지켜야 할 원칙들을 재정립 ! SOLID SRP : Single Responsibility Principle 단일 책임 원칙 OCP : Open Closed Principle 개방 폐쇄 원칙 LSP : Liskov Substitution Principle 리스코프 치환 원칙 ISP : Interface Segregation Principle 인터페이스 분리 원칙 DIP : Dependency Inversion Principle 의존성 역전 원칙 SRP 단일 책임 원칙 하나의 역할을 책임지는 코드를 함께 묶어주는 것 → 응집도 서로 다른 역할을 맡은 코드는 분리하여야 한다. 모든 클래스는 단 하나의 책임만을 가져야 함..

    Java :: LocalDateTime 을 Epoch Time 으로 바꾸기

    Java :: LocalDateTime 을 Epoch Time 으로 바꾸기

    날짜 정보를 API 를 통해 클라이언트에게 전송하는 중 날짜 데이터를 Epoch Millisecond 형식으로 달라는 요청을 받았다. Java8 LocalDateTime 형식의 데이터를 Epoch 시간으로 변경해보자. LocalDateTime → Epoch Second long toEpochSecond(ZoneOffset offset) 을 사용하자. long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC); LocalDateTime → Epoch Milliseconds Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); long timeInMillis = inst..

    Java :: 객체지향 패러다임

    Java :: 객체지향 패러다임

    적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것 점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임 대두 중요한 두 가지 포인트 1. 클래스가 아닌 객체에 초점을 맞추는 것 2. 객체들에게 얼마나 적절한 역할과 책임을 할당하는가 절차지향 프로그래밍과 객체지향 프로그래밍의 차이 책임이 한 곳에 집중되어 있는 방식인가 → 절차지향 책임이 여러 객체로 적절히 분산되어 있는 방식인가 → 객체지향 High cohesion, loose coupling 높은 응집도와 낮은 결합도성격이 다른 것들은 분리를 시키는 것 ! 응집도가 높은, 비슷한 것끼리는 하나로 모아두고, 또한 변화가 생겼을 때, 다른 곳에는 영향을 미치지 않는다. 장점이 무엇일까 ? 변경이 생겼을 때 변경의 ..

    Java :: 객체지향의 5가지 설계원칙 SOLID

    Java :: 객체지향의 5가지 설계원칙 SOLID

    SRP : Single Responsibility Principle (단일 책임의 원칙) OCP : Open/Closed Principle (개방 폐쇄의 원칙) 확장에는 열려있고 변경에는 닫혀있다. 즉, 기존 코드를 수정하지 않고 기능을 추가할 수 있어야 한다. LSP : Liskov’s Subsititution Principle (리스코프 치환의 원칙) 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에는 문제가 없어야 한다. ISP : Interface Segregation Principle (인터페이스 분리의 원칙) 많은 기능을 가진 인터페이스를 작은 기능 단위의 인터페이스로 분리함으로써 클라이언트에게 필요한 인터페이스에 대해서만 구현체를 만든다. 클라이언트가 사용하지 않는 기능에 대해서 의존성..

    Java :: Stream으로 Random 수 생성

    Java :: Stream으로 Random 수 생성

    난수를 생성하는데 사용하는 Random 클래스 에는 아래 인스턴스 메소드들이 포함되어 있다. 이 메소드들은 해당 타입의 난수들로 이루어진 스트림을 반환한다. IntStream ints() LongStream longs() DoubleStream doubles() 이 메소드들이 반환하는 스트림은 크기가 정해지지 않은 무한 스트림 이므로 limit() 도 같이 사용해서 스트림의 크기를 제한해주어야 한다. limit() 은 스트림의 개수를 지정하는데 사용되고 무한 스트림을 유한 스트림으로 만들어준다. IntStream intStream = new Random().ints(); //무한 스트림 intStream.limit(5).forEach(System.out::println); //5개의 요소만 출력 매개변수..

    Java :: 람다와 스트림 (2/2)

    Java :: 람다와 스트림 (2/2)

    남궁성 저자의 Java의 정석 3판 스터디 스트림이란 ? 많은 수의 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고, for 문이나 Iterator 를 이용해 코드를 작성했었다. 하지만 이런 방식의 코드는 너무 길고 가독성이 떨어진다. (재사용성도) 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야한다는 것이다. 예를들어 List 를 정렬할 때는 Collections.sort() 를 사용해야 하고, 배열을 정렬할 때는 Arrays.sort() 를 사용해야 한다. 이런 문제점들을 해결하기 위해서 만든 것이 스트림(stream) 이다 ! 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해놓았다. 데이터 소스가 무엇이던 같은 방식으로 다룰 수 있게 되었고, 코드의 재사..

    Java :: 람다와 스트림 (1/2)

    Java :: 람다와 스트림 (1/2)

    남궁성 저자의 Java의 정석 3판 스터디 자바는 자바8 (JDK1.8) 에서 람다식이 추가되면서 객체지향언어인 동시에 함수형 언어가 되었다. 람다식에 대해 알아보자 😊 람다식이란 ? 람다식은 간단히 말해 method 를 하나의 식(expression)으로 표현한 것이다. method 를 람다식으로 표현하면 method의 이름과 반환값이 사라지므로, 람다식을 익명함수(anonymous function) 이라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); // 위 람다식을 method 로 표현하면 아래와 같다. int method() { return (int)(Math.random() * 5) + ..

    Java :: Collection Class

    Java :: Collection Class

    남궁성 저자의 Java의 정석 3판 스터디 이전 글에서 Collections Framework 에 대해서 알아보았다. 이번에는 Collections Framework 의 클래스들을 알아보고자 한다. 다룰 클래스 ⬇️ ArrayList LinkedList Stack, Queue Iterator, ListIterator, Enumeration Arrays Comparator, Comparable HashSet TreeSet HashMap, Hashtable TreeMap Properties Collections ArrayList List 인터페이스를 구현했고, 기존의 Vector 를 개선한 클래스. 💡 Vector 는 기존에 작성된 소스와의 호환성을 위해 남겨두고 있는 것이기 때문에 Vector 보다는 Ar..