java
5 posts
캡슐화(Encapsulation)란?

캡슐화란? 객체의 상태와 행위를 외부로 부터 보호합니다. 주로 접근 제어자를 사용하여 구현합니다. 왜 캡슐화를 지켜야 하나요? 객체지향적이란, 객체 각각 역할과 책임을 다해야합니다. 내 상태와 행위를 밖으로 노출시키게 된다면 어떻게 될까요 ? 캡슐화를 지킨 사례 캡슐화가 위반된 사례 데이터와, 행위를 하나로 묶고, 그걸 외부에 노출시키지 않는게 왜 중요한가? 아래와 같이 코드를 작성하더라도 같은 행위가 아닌가? 캡슐화를 지키기 위한 규칙중에는 라는 원칙이 있다. 객체 내부의 데이터를 꺼내와서 처리하는게 아닌, 객체에게 처리할 행위를 요청하라는 행위이다. 이러한 행위를 우리는 “객체에 메세지를 보낸다” 라고 말한다. 그렇다면 왜 캡슐화를 지키기 위해서는 데이터를 객체로부터 받아와서 처리하면 안된다고 하는걸까? 캡슐화의 장점을 살펴보면 그 이유를 간단히 이해할 수 있다. 캡슐화를 통해 우리가 얻을 수 있는 이점중 가장 큰것은 코드의 중복을 피할 수 있다는 점과, 데이터를 처리하는 동…

Arrays vs LinkedList

학습 동기 평소에 목록을 저장하기 위해서 배열이나 List 자료 형을 썼었는데, 배열과 ArrayList 는 메모리 크기가 고정되어 있는지, 동적으로 커지는지에 차이가 있다고 생각되어 구분하여 잘 사용 했었습니다. 그런데 알고리즘을 풀면서 LinkedList 와는 잘 비교해서 사용하지 않았던 것 같아서 정리해보고자 합니다. 배열(Arrays) 배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조에요 Index 를 통해서 접근이 가능하고 0 번부터 시작합니다. 최초 크기가 고정되면 바꿀 수 없어요. 시간 복잡도 조회는 접근하고자 하는 인덱스만 안다면 O(1) 시간이 걸려요. 순차 탐색시는 최대 O(n) 이 소모됩니다. 삽입 및 삭제 배열의 삽입, 삭제 O(n) 삭제된 원소 뒤에 있는 원소들을 한칸씩 옮겨야 해서 O(n) 이 소모됩니다. 배열의 에 삽입 및 삽입, 삭제 O(1) 가장 뒤에는 옮길 원소가 없기 때문에 O(1) 이 소모됩니다. 사용하면 좋은 상황 …

Stream의 reduce() 로 조합 계산하기

해당 글은 Stream 에 대해 알고 있다는 가정하에 작성되었습니다. 학습 동기 프로그래머스에서 위장 이라는 문제를 풀다가 모든 경우의 수를 찾아보는데 조합으로 풀면 간단하겠다고 생각이 들었고, 조합을 풀면서 재귀나 반복으로 풀기보다 Java Stream 에서 제공하는 기능으로 문제를 풀어보면 좋겠다고 생각되었습니다. 해당 글은 Stream 에 대해 알고 있다는 가정하에 작성되었습니다. Reduce() 란? 반복된 패턴을 추상화 할 수 있는 강력한 기능입니다. 스트림의 특성상 for 문처럼 원소들이 하나씩 아래로 들어오게 되는데요.  는 스트림의 원소들을 하나씩 소모해가며, 누적 계산을 수행하고 결과값을 리턴하는 메서드 입니다. 는 파라미터를 3개 받을 수 있어요. : 계산에 적용할 초깃값으로, 스트림이 비어 있더라도 초깃값을 반환 만약에 값을 누적하면서 곱하고 싶다면 기본 값이 1이어야 하겠죠? : 적용할 계산 함수 더하거나, 곱하거나, 빼거나 이런 연산을 수행해요. : 병렬 …

Hash table, HashMap, HashSet

학습 동기 중복되지 않는 값을 가진 데이터를 빠르게 조회하고 싶었어요. 그리고 그 값에 대한 개수를 세고 그 개수에 대한 로직을 작성하고자 했습니다. 그러던 중 해시 함수를 이용해서 테이블에 데이터 Key - value 형식으로 저장하는 HashMap 이 떠올랐어요. HashMap 내부는 Hash table 로 구현되어 있기 때문에 Hash table 에 대해서 먼저 알아보면 좋을 것 같습니다. HashTable 해시 테이블은 연관배열 구조를 이용해서 키(key) 에 결과값에 (value) 를 저장하는 자료 구조 입니다! 저장 시간 복잡도 데이터가 입력되면 해당 해시함수 로직을 통해서 고유 번호(해시값)가 나오게 되고, 그 고유번호를 key 로 가지고, 실제 데이터(value) 를 slot 이라고 부르는 공간에 넣게 돼요. 그래서 최단 시간 복잡도는 O(1) 이고, 만일 충돌이 발생하게 되면 최대 O(n) 의 시간이 걸릴 수도 있어요.😭 충돌이 발생하는 경우 key 값이 같고,…

Difference Between Arrays.asList() and List.of() 요약

해당 내용은 Baeldung 사이트를 번역한 후, 제 생각을 정리한 글입니다. 1. 개요 때때로 Java에서는 편의를 위해 작은 목록을 만들거나 배열을 목록으로 변환해야 합니다. Java는 이를 위한 몇 가지 도우미 메서드를 제공합니다. 이 자습서에서는 작은 임시 배열을 초기화하는 두 가지 주요 방법인 List.of() 와 Array.asList()를 비교합니다. 2. Arrays.asList() 사용하기 Java 1.2에 도입된 Arrays.asList() 는 Java Collections Framework 의 일부인 List 객체 생성을 단순화합니다. 배열을 입력으로 받아 제공된 배열 의 List 객체를 생성할 수 있습니다. 보시다시피 간단한 List of Integers 를 만드는 것은 매우 쉽습니다 . 2.1. Arrays.asList() 사용해서 반환받은 List 는 삽입, 삭제가 불가능합니다. (수정은 가능) asList() 메서드 는 고정 크기 목록을 반환합니다.…