본문 바로가기
728x90
반응형

자료구조10

클린코드(Clean code) 7장 - 오류 처리 1. 오류를 나타낼 때는 오류코드 냅다 던지지 말고 예외를 던지자 에러코드 ~~ 이면 ~~ 로 처리한다 전개보다는 오류가 발생한 곳에서 예외를 던진다. 별도의 처리가 따로 필요하다면 checked exception 처리하고, 그렇게 할 생각이 없다면 메서드 선언부에 throws Exception 이라도 둘러주자. (사실 try catch 제외하면 나 이거 제일 좋아함) try -> catch 를 통해 실행문을 감싸고, 예외를 처리할 수 있는 곳에서 catch 2. 특별한 경우가 아니라면, 에러클래스를 상속하여 하위클래스를 쓰잘데기 없이 또 만들지 말 것. unchecked throwable 은 RuntimeException의 하위 클래스로 만들자. 쓸데없이 throwable을 정의해서 만들 수도 있지만 .. 2022. 9. 13. 18:44
클린코드(Clean code) 6장 - 객체와 자료 구조 1. 자료구조 vs 객체 : 상황에 맞게 선택하기 절차적인 코드는 새로운 자료구조를 추가하기 어렵고 모든 함수를 다 고쳐야 한다. 자료구조를 사용하는 절차적 코드는 기본 자료구조를 변경하지 않으면서, 새로 함수를 추가하기 쉽다. 객체지향 코드는 기존 함수를 변경하지 않으면서 새로운 클래스를 추가하기 쉽다. 하지만 새로운 함수를 추가하려면, 모든 클래스를 고쳐야 한다. => 새로운 자료 타입 추가에 대한 유연성이 필요할때는 객체, 새로운 동작에 대한 유연성이 필요하면 자료구조와 절차적인 코드를 사용하자. 2. 디미터 법칙 클래스 C의 메서드 f는 이런 객체의 메서드만 호출해야 한다 -클래스 C -메서드 f 자신이 생성한 객체 -메서드 f 자신의 인수로 넘어온 객체 -클래스 C의 인스턴스 변수에 저장된 객체.. 2022. 9. 11. 12:06
인강으로 운영체제를 배워보기로 했다 CS지식이 부족함을 느끼고 신입사원때 인강을 결제했다가.. 여전히 끝내지 못한 강의가 있다 그 중 다른 블로그였나에서 운영체제 강의는 정말 들을만 하다고 추천했던 기억이 나서 https://online.fastcampus.co.kr/p/dev_online_cs 올인원 패키지 : 컴퓨터 공학 컴퓨터 공학에 대한 전반적인 이해를 할수 있는 강의 online.fastcampus.co.kr 2019년에 내돈내산 한 강의를 이제야 꺼내본다. (지금은 단종됐나 보이지 않는다... 다행히 수강기간이 무제한이라 망정이지) 알고리즘공부는 계속 할 예정이고 운영체제 강의 듣고 나서는 시스템프로그래밍 -> 컴퓨터구조로 넘어갈 생각 좀더 지금하는 일을 기초부터 이해하기 좋을 거 같은 강의들 아 후기 조작할일은 단언컨대 없음... 2021. 11. 13. 23:55
Java의 Generic 이번 시간에는 generic에 대하여 알아보려 합니다. 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미합니다. Java 5 이전에는 대부분의 클래스와 메서드에서 인수나 반환값으로 Object을 사용했습니다. 그러나 object을 사용하는 경우에는 저장할 때와 읽어올 때 총 두 번 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성이 여전히 남아 있습니다. 이를 해결하기 위해 Java 5 버전부터 generic이 추가되어, 클래스/메서드 단에서 잘못된 타입 사용으로 인한 문제를 해결할 수 있게 되었습니다. 제네릭의 장점을 크게 2가지로 요약할 수 있습니다. 1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습.. 2021. 8. 29. 16:01
Queue에 대해 알아보자 이번 시간에는 queue에 대하여 알아보려 합니다. Queue는 ‘대기줄’이라는 뜻을 가진 영어 단어입니다. Java의 Queue 인터페이스는 선입선출(FIFO: First In First Out) 형태로 자료를 보관하고 꺼내는 버퍼입니다. 음식점, 은행 같은 곳에서 줄을 설 때 먼저 온 사람부터 서비스를 받을 수 있는 것처럼, 가장 먼저 저장(push)된 데이터가 가장 먼저 인출(pop)됩니다. Queue는 주로 linkedlist 형태로 구현되며, queue에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean add(E e) 해당 큐의 맨 뒤에 전달된 요소를 삽입함. 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateExcept.. 2021. 8. 28. 15:57
Stack(push/pop) 이번 시간에는 stack에 대하여 알아보려 합니다. Stack은 ‘쌓아 올림’, ‘더미’ 라는 뜻을 가진 단어입니다. 선형 메모리 공간에 데이터를 쌓아 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조입니다. 맨 처음 들어간 데이터가 바닥에 쌓이고, 맨 마지막에 저장된(push) 데이터가 제일 먼저 인출되어(pop) 삽입/삭제/수정이 가능합니다. 프링*스 과자를 생각하면 이해하기 쉬울 것 같네요. 통에 과자를 넣을 때, 맨 나중에 들어간 과자를 맨 처음 먹게 될 것입니다. 스택도 같은 원리입니다. 맨 위 데이터를 top이라고, 맨 아래는 bottom이라고 부르며, 보통의 경우 bottom의 값은 0으로 고정됩니다. stack에서 자주 사용되는 메소드는 다음과 같습니다. 메소드 설명 boolean.. 2021. 8. 27. 15:51
Hashmap / Treemap 이번 시간에는 map 구조, 그 중 가장 많이 쓰이는 hashmap과 treemap에 대해 알아보려고 합니다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용합니다. 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다. Map 컬렉션 클래스의 공통된 특징 2가지가 다음과 같습니다. 1. 요소의 저장 순서를 유지하지 않습니다. 2. 키는 중복을 허용하지 않지만, 값의 중복은 허용합니다. 해시 알고리즘(hash algorithm)이란 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘입니다. 자바에서 해시 알고리즘을 이용한 .. 2021. 8. 26. 15:46
Doubly-linkedlist에 대해 알아보자 지난 시간에 살펴본 Linkedlist에는 치명적인 단점이 하나 있습니다. Linkedlist를 사용하면 노드에 저장되는 다음 값의 메모리 주소를 바꾸어 연결을 수정하는 방식으로 효율적인 값 추가 및 제거가 가능합니다. 하지만 리스트의 다음 값으로는 넘어가기 쉽지만, 이전 값을 찾아 접근하기 어렵습니다. Doubly-Linkedlist(이중 연결 리스트)는 이런 단점을 해결하기 위해 탄생했습니다. Doubly-Linkedlist는 다음에 올 값의 메모리 주소와 함께, 이전 값의 메모리 주소를 저장해서, 앞뒤로 탐색이 가능합니다. 처음부터 시작해서 next를 이용해서 탐색하고, 후반부 절반의 엘리먼트는 마지막 노드부터 previous를 이용해서 조회합니다. 값을 추가할 때도 linkedlist와 마찬가지로.. 2021. 8. 25. 15:39
Linkedlist에 대해 알아보자 지난 시간에 살펴본 Arraylist에는 치명적인 단점이 하나 있습니다. 놀이기구를 타려고 줄을 서 있는데, 한 명이 새치기를 하게 되면 그 뒤에 서 있던 모든 사람이 한 칸씩 뒤로 순서가 밀리는 비효율이 발생하게 됩니다. 이처럼, 배열 사이에 새로운 값을 추가해 넣으려면 너무 많은 메모리 낭비가 발생합니다. Linkedlist(연결 리스트)는 이런 단점을 해결하기 위해 탄생했습니다. (가독성을 위해 줄을 맞추긴 했지만) 저장된 요소가 비순차적으로 분포할 수 있고, 이들을 링크로 연결합니다. 저장할 값과 함께 뒤에 올 값의 메모리 번호를 노드에 저장하여, 두 요소를 굳이 붙여 놓지 않아도 다음 값의 메모리 번호만 잊지 않는다면 서로를 소환해서 연결할 수 있습니다. 새로운 값의 추가나 제거도 Arrayli.. 2021. 8. 24. 15:30
728x90
반응형