CS/DS & OOP
-
Map 그리고 merge()CS/DS & OOP 2022. 1. 29. 12:32
Java의 자료구조 중 Map에 대해 이야기 해보려합니다. HashMap, TreeMap 두가지에 모두 적용되는 이야기입니다. 간단히 두 맵에 대해 알아보고, 알아두면 좋을 내용들 그리고 마지막으로 merge에 대해 살펴보겠습니다. Map Key, Value로 내부 데이터를 구성하고 Key는 중복이 불가능하지만, Value 값은 중복 가능합니다. 중복이 가능하고 불가능 여부는 아래와 같습니다. Map map 로 선언한 경우 i) key 중복 map.put("apple", 1); map.put("apple", 2); => map.get("apple"); 호출 시 2의 값을 반환합니다. ii) value 중복 map.put("apple", 1); map.put("banana", 1); => map.get("..
-
JVM (Java Virtual Machine), GC (Garbage Collection)CS/DS & OOP 2021. 6. 22. 17:40
매번 면접 전 개념을 다시 정리하고 공부하는 두 가지입니다. 많은 설명을 참고하고 공부하고 있지만, 눈으로 직접 볼 수 없기에 여전히 제게는 꽤나 추상적으로 느껴집니다. JVM 자바 bytecode를 실행할 수 있는 주체 자바 bytecode는 플랫폼 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 bytecode를 실행 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장 '플랫폼 독립적이다'라는 특징은 자바를 사용하는 가장 큰 이유입니다. 물론 자바도 환경 변수 설정은 해야 합니다. 근데 그 과정이 상당히 간단하고, 이렇게만 하면 어떤 OS든 간에 코드를 따로 건드릴 필요 없이 잘 작동합니다. 다들 아시겠지만, bytecode는 자바의 코드가..
-
Exception (try-with-resources)CS/DS & OOP 2021. 1. 12. 18:25
???: close()형도 나가있어... Resource 할당/해제 문제 프로그램은 OS에서 자원을 할당받아 동작합니다. 자원에는 메모리와 CPU, 입출력 장치, 주/보조 기억장치 등이 있습니다. 자원은 무한한 것이 아니기 때문에 필요에 따라 설정에 따라 각 프로그램에 분배되어야 합니다. 만약 사용한 자원을 사용 후 닫지(close) 않는다면, 다른 프로그램이 제때 필요한 자원을 사용할 수 없겠죠. Input/Output Stream, Connection 등, Java 라이브러리에도 해제해줘야 하는 자원이 존재합니다. 이러한 자원을 닫아주는 작업은 종종 놓칠 수 있어 성능상의 문제로도 이어지는 경우가 많습니다. 필요할 때 바로 사용하지 못한다면, 그만큼 지연시간이 발생하고 이에 따라 속도가 느려질 테니까..
-
Exception (checked, unchecked)CS/DS & OOP 2021. 1. 10. 19:45
???: I/O 형은 나가있어(Exception..!?).. Exception 말 그대로 예외입니다. 프로그램 실행 중에 발생하여 프로그램 명령의 정상적인 흐름을 방해하는 이벤트입니다. 이러한 Exception들을 그냥 두면 정상적인 요청/응답을 하는 데 있어 문제가 생기겠죠? 따라서 Exception을 처리, 즉 예외 처리를 진행해야 합니다. * 예외 처리라는 말에서 알 수 있듯 예외는 핸들링이 가능합니다. 예외 처리 방법 예외 복구 - 다른 작업 흐름으로 유도. 예외 전환 - 예외의 원인을 명시적으로 나타내어 throw. 예외 회피 - 예외를 처리하지 않고 호출한 곳으로 넘겨줌(throw). 또한, Exception은 두 종류로 나뉘는데 그것이 바로 'checked/unchecked Exception..
-
Java 자료형과 String poolCS/DS & OOP 2020. 7. 1. 18:52
오늘 작년에 같이 대외활동했던 동생이 자바 공부한다고 연락이 왔습니다. 원래 파이썬을 쓰던 친구라 그런지 일반적인 언어에서 쓰는 개념과는 조금 헷갈려 하더라구요. (물론 파이썬이라서 그렇다기보단 새로운 언어를 공부하게 되면 겪는.. 혼동은 항상 있겠죠.) 또한, 일반적이라고 말하기엔 조금 편견이 있지만, python이 친근해진 것은 다른 언어에 비해 최신이니 이와 같이 표현했습니다. 어쨌든, 그 중 문자열과 문자 관련한 이야기가 나왔는데, 마침 정리해 두는 것이 좋을 것 같아 포스팅합니다. 대부분의 언어에선 문자와 문자열은 다르게 취급됩니다. C언어 쪽은 문자는 char, 문자열은 char[]로 표시를 한다 알고 있습니다. (문자 여러 개 == 문자열이니까 꽤나 직관적이네요.) 자바에서는 문자는 char..
-
객체지향 5원칙 (SOLID)CS/DS & OOP 2020. 6. 24. 15:15
객체지향은 말 그대로 프로그래밍 개발에 있어서 '객체화를 지향하여 진행한다.'라는 의미입니다. Wiki에 기술되어 있는 정의는 아래와 같습니다. 객체 지향 프로그래밍 (영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (출처: 위키피디아) 개발하시는 분들은 이 정도는 다 아실 것이라 생각합니다. 다만, 이 객체지향이라는 것이 어떻게 적용되고 있는지 자세히 알아야 좀 더 이해가 빠르겠죠. 따라서 객체지향에는 '어떤 것이 객체지향이지..
-
트리와 그래프CS/DS & OOP 2020. 3. 5. 14:46
컴퓨터공학 전공 중이시라면 당연히 두 자료구조의 이름은 들어보셨을 겁니다. 하지만 뭐.. 저는 학교 다니면서 그 차이점에 대해 전혀 알지 못했었는데요. 그렇게 여러 문제를 접하며 박살이 난 후에야 그 중요성을 알게 되었습니다.. 하하; 그래서 이 글에선 문제를 제대로 이해하기 위해선 반드시 정의와 그 차이를 알아야 하는 두 자료구조에 대해 알아보겠습니다. (가볍게 어떤 것이고 이런 차이가 있다 정도로만 짚고 넘어가보겠습니다. ㅎㅎ) Tree? 트리 구조란 그래프의 일종으로, 여러 노드가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프를 트리라고 부른다. (참고: wiki) Graph? 그래프는 일부 객체들의 쌍들이 서로 연관된 객체의 집합을 ..