전체 글 202

TreeSet

TreeSet TreeSet은 이진 검색 트리binary search tree라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스다. 이진 검색 트리는 정렬, 검색, 범위 검색Range Search에 높은 성능을 보인다. TreeSet은 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리Red-Black tree로 구현 되었다. Tree는 여러 개의 node가 서로 연결된 구조다. 가장 상위에 있는 노드를 root라고 한다. 위 아래로 연결된 두 노드를 부모-자식 관계라고 한다. 각 노드에 최대 2개의 노드를 연결할 수 있다. 출처 : 자바의 정석 기초편 요약집 위 표는 TreeSet에 7,4,9,1,5를 순서대로 저장한다고 했을 때 진행과정이다. 맨 처음 저장되는 데이터 7이 루트root가 된다. 그 ..

Java 2020.09.09

HashSet

HashSet HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이다. 다시 상기하자면, Set은 중복 허용 X 순차 저장 X 중복된 데이터를 저장하려고 하면 false를 반환한다. HashSet의 특징을 이용하면 중복을 쉽게 제거할 수 있다. HashSet의 메서드 method 설명 HashSet() (생성자)객체 생성 HashSet(Collection c) 지정한 컬렉션을 포함하는 객체 생성 HashSet(int initialCapacity) 지정한 값을 초기용량으로 하는 객체 생성 HashSet(int initialCapacity, float loadFactor) 초기 용량과 load factor를 지정하는 생성자 boolean add(Object o) 객체 저장 boolean addAl..

Java 2020.09.09

Comparable & Comparator

public interface Comparator { int compare(Object o1, Object o2); } public interface Comparable { public int CompareTo(Object o); } Comparable 기본 정렬 기준을 구현할 때 사용한다. Comparator 기본 정렬 기준 외, 다른 기준으로 정렬할 때 사용한다. package com.javaex.ch11; import java.util.Arrays; import java.util.Comparator; public class ComparatorEx { public static void main(String[] args) { String[] strArr = {"cat", "Dog", "lion", "t..

Java 2020.09.09

Arrays

Arrays 배열을 다루기 편한 static메서드를 제공한다. 배열의 출력 toString() static String toString(boolean[] a) static String toString(byte[] a) static String toString(char[] a) ... ... static String toString(Object[] a) println메서드처럼 모든 타입을 출력할 수 있게 오버로딩 되어 있다. 배열 복사 copyOf() 배열 전체를 복사한다. copyOfRange() 배열 일부를 복사한다. int[] arr = {0,1,2,3,4}; int[] arr2 = Arrays.copyOf(arr, arr.length); //0,1,2,34 int[] arr3 = Arrays.cop..

Java 2020.09.09

List

ArrayList ArrayList는 컬렉션 프레임워크에서 가장 많이 사용하는 클래스다. Object를 이용해 순차적으로 데이터를 저장한다. 저장 공간이 없으면 동적으로 크기가 늘어난다. 새로운 배열을 만들어서 기존의 배열을 복사해 다시 저장한다. public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { ... transient Object[] elementData; //Object배열 ... } ArrayList의 소스 일부다. elementData라는 이름의 Object[]를 멤버 변수로 선언해놨다. 따라서 ArrayList는 모든 타입의 객체를 담을 수 있다. A..

Java 2020.09.09

Stack & Queue

📚 자바의 정석을 정리한 내용입니다. 출처 : https://gohighbrow.com/stacks-and-queues/ 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 Last in first out(LIFO)구조. 큐는 처음 저장한 데이터를 가장 먼저 꺼내는 First in first out(FIFO)구조다. 참고로 Stack은 클래스, Queue는 인터페이스다. Stack의 메서드 method 설명 boolean empty() Stack이 비었는지 확인 Object peek() Stack 맨 위에 저장된 객체를 반환 pop과 달리 꺼내는 것은 아님 비어 있다면 EmptyStackException Oject pop() 맨 위에 저장된 객체를 꺼낸다. 비었다면 역시 EmptyStackExcption ..

Java 2020.09.09

Collections Framework - 핵심 인터페이스

📚 자바의 정석을 정리한 내용입니다. Collections Framework는 다수의 데이터를 다루는 데 필요한 다양한 클래스를 제공한다. 핵심 인터페이스 상속계층도 이미지 출처 : http://dinfree.com/lecture/language/112_java_6.html interface 특징 구현 클래스 List 순서가 있는 데이터 집합. 중복 허용 ArrayList, LinkedList, Stack, Vector 등 Set 순서를 유지하지 않는 데이터 집합. 중복 없음. HashSet, TreeSet Map key, value 쌍(pair)으로 이루어진 데이터 집합. 순서 유지 안 됨. key는 중복 안 됨. HashMap, TreeMap, Hashtable, Properties 컬렉션 프레임워크..

Java 2020.09.09

내부 클래스inner class

📚 자바의 정석을 정리한 내용입니다. 내부클래스의 종류 내부 클래스는 단순히 클래스 내에 선언된 클래스다. 내부 클래스의 장점 1.내부 클래스에서 외브 클래스 멤버에 쉽게 접근 가능 2.코드 복잡성을 줄인다(캡슐화) 위 다이어그램에서 보다시피 내부 클래스는 클래스의 멤버처럼 다룬다. 다른 점은 익명 클래스Anonymous class가 있다. 내부클래스의 제어자, 접근성 자바의 정석 예제에 간단히 주석을 달았습니다. class Outer { class InstanceInner { int iv = 100; } static class StaticInner { int iv = 200; static int cv = 300; } void myMethod() { class LocalInner { int iv = 40..

Java 2020.09.09

추상클래스 & 인터페이스

이미지 출처 : https://learn-tech-tips.blogspot.com/2016/07/object-oriented-programming-abstract-class-vs-interface.html 추상 클래스abstract class 추상 클래스란? 미완성 클래스 즉, 완성되지 않은 abstract 메서드를 포함하고 있는 클래스라는 뜻이다. 추상 메서드abstract method 메서드는 선언부와 구현부로 나눈다. 선언부만 있고 구현부는 작성하지 않은 메서드를 추상 메서드라고 부른다. 추상 클래스를 상속받는 자손 클래스는 부모 클래스가 가진 모든 추상 메서드를 구현해야만 한다. 추상 클래스는 해당 클래스를 상속 받을 자손들이 사용하는 공통 부분을 뽑아내서 정의한다. 추상 클래스를 사용하는 이유는..

Java 2020.09.09

NoSuchBeanDefinitionException: No bean named 'dataSource' available

스프링 시큐리티 로그인 방법 중에 JDBC를 이용한 로그인 인증 테스트를 진행했다. 그런데 하루종일 dataSource를 찾을 수 없다는 에러NoSuchBeanDefinitionException: No bean named 'dataSource' available가 났다. 처음엔 dataSource가 잘 연결 되지 않은 줄 알고 root-context.xml을 만지작거렸다. 딱히 잘못된 부분은 없었다. url, id, pw 모두 잘 설정되어 있었다. 테스트 클래스를 만들어서 DataSource가 잘 동작하는지 테스트 해봤을 때도 문제가 없었다. security-context.xml에서도 크게 문제될 건 없었다. 문제는 web.xml에 있었다. 이렇게 파라미터 값이 따로 설정되어 있었다. 이것을 이렇게 하나..

ERROR!!!!!!! 2020.09.09

Ubuntu 특정 port 죽이기

netstat명령어로 모든 포트를 확인할 수 있다. 좀더 자세하게, 내가 원하는 포트를 찾으려면 '-nap|grep 포트넘버'를 추가하면 된다. hoon@hoon-MS-7C51:~$ netstat -nap|grep 8080 $ netstat -nap|grep 8080 이런 결과가 나타난다. 지금은 사용 중인 LISTEN상태다. 여기서 8080포트를 죽이고 싶다면 sudo kill $(sudo lsof -t -i:8080)이 명령을 실행하면 된다. 그러고 나서 다시 조회해보면, 이렇게 비활성화 된 것을 확인할 수 있다.

infra 2020.09.08

다형성Polymorphism

📚 자바의 정석을 정리한 내용입니다. 다형성? 운전하는 법은 한 번만 배우면 어떤 자동차든 운전할 수 있다. 자동차 브랜드나 내부 구현에 따라 달라지지 않는다. 동일한 인터페이스를 가지고 있기 때문이다. 이게 다형성이다. OOP에서 다형성이란 여러가지 형태를 가질 수 있는 능력. 말하자면 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있는 것이다. class Tv { boolean power; int channel; void power{ power = !power;} void channelUp() { ++channel;} void channelDown() { --channel;} } class CaptionTv extends Tv { String text; void caption() {..

Java 2020.09.06

상속Inheritance

📚 자바의 정석을 정리한 내용입니다. 상속Inheritance 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 코드를 공통적으로 관리할 수 있기 때문에 유지보수 하기 쉽다. class Child extends Parent { //... } extends만으로 간단하게 상속 받을 수 있다. 상속해주는 클래스Parent를 조상 클래스, 상속을 받는 클래스Child를 자손 클래스라고 한다. 이 두 관계를 상속관계라고 부른다. 출처 : https://www.javatpoint.com/inheritance-in-java 조상클래스는 자손 클래스가 변경 되어도 영향을 받지 않지만, 조상클래스가 변경되면 자손 클래스는 영향을 받는다. 자손 클래스는 조상 클래스의 모든 멤버를 상속 받는다. 따라서 항상 조..

Java 2020.09.06

제어자Modifier

📚 자바의 정석을 정리한 내용입니다. 제어자Modifier Non-Access-Modifiers 접근 제어자가 아닌 제어자들로는 static, final, abstract, synchronized......등이 있다. 몇 가지만 소개한다. static 멤버변수, 메서드, 초기화 블럭 앞에 붙는다. static이 변수에 붙으면 모든 인스턴스에서 공통으로 사용되는 클래스 변수가 된다. 메서드에 붙으면 인스턴스 생성없이 호출할 수 있는 static 메서드가 된다. final 클래스, 메서드, 멤버변수, 지역변수에 붙는다. final이 붙으면 수정할 수 없는 메서드, 변수, 클래스가 된다. 즉, final변수는 값을 변경할 수 없는 상수. final method는 오버라이딩 불가. final class는 ext..

Java 2020.09.06

객체지향2

📚 자바의 정석을 정리한 내용입니다. JVM 메모리 구조 JVM은 프로그램을 수행하는데 필요한 메모리를 할당 받는다. JVM은 이 메모리를 여러 영역으로 나누는데, 주요 영역 세 가지다. Method area 클래스가 사용될 때, JVM은 해당 클래스의 클래스 파일*.class를 읽고 클래스에 대한 정보를 이곳에 저장한다. 당연히 클래스 변수도 이곳에 저장된다. Call Stack 혹은 Execution Stack 메서드 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 콜스택에 메모리가 할당되고, 작업이 끝나면 반환된다. Heap 인스턴스가 생성되는 공간이다. 인스턴스 변수도 이곳에 생성된다. 위에서 말한 호출스택Call Stack은 이런 식으로 동작한다. 클래스(static) 메서드와 인스턴스..

Java 2020.09.06

이진수로 숫자와 문자 나타내기

이번 시간에는 어떻게 컴퓨터가 수치 데이터를 나타내고 저장하는지 알아본다. 참과 거짓은 이진수 0과 1로 나타낼 수 있다. 이진수에서 0과 1을 비트라고 부른다. 8비트를 다룬다면 0-255 사이의 숫자를 표현할 수 있다. 32비트나 64비트, 라는 컴퓨터 용어에 대해 들어봤을 것이다. 이건 32나 64비트의 덩어리로 작동한다는 뜻이다. 이건 아주 많은 숫자를 다룰 수 있따. 32비트로 다룰 수 있는 가장 큰 숫자는 43억 미만이다. 이것이 우리가 인스타그램 사진을 매우 부드럽고, 선명하게 볼 수 있는 이유다. 32bit는 32개의 0과 1로 이루어진다. 문제는 모든 수가 양수가 아니라는 것이다. 음수는 어떻게 다룰 것인가? 대부분 컴퓨터는 부호의 첫번재 비트를 음과 양을 나타내는 데 사용한다. 맨 첫자..

Computer Science 2020.09.06

#3.부울연산 boolean logic & logic gates

CrashCourse Computer Science 강의를 듣고 정리했습니다. 정확하지 않은 내용이 있을 수 있습니다. 2가지의 전기적 상태만으로 우리는 중요한 정보를 표현할 수 있다. 우리는 이것을 두 가지 상태를 일컫는 이진Binary이라고 부른다. 이 두 가지는 정확히 참이거나 거짓을 나타낼 때 필요하다. 초기 전자 컴퓨터 중에는 3 개의 상태를 가진 3진법 또는 5진법을 채택한 컴퓨터도 있었다. 그러나 중간 상태가 많을 수록 그것을 나누기가 힘들었다. 트랜지스터가 1초에 수백만 번 상태를 바꾼다면 상황은 더 안 좋다. 그래서 단지 on과 off만을 사용하고 두 개의 신호를 멀리 배치하게 되었다. 이진법을 채택한 또 다른 이유는 참과 거짓을 다루는 학문이 독점적으로 있었기 때문이다. 그 수학 분야는..

Computer Science 2020.09.06

#2.전자 컴퓨터Electronic computing

이 글은 CrashCourse ComputerScience강의를 제멋대로 정리한 글입니다. 정확하지 않은 정보가 있을 수 있습니다. 첫 강의에서 20세기 초반부까지 컴퓨터의 역사에 대해 살펴봤다. 계전기 tabulating machines 같은 특수목적장치는 수동으로 이루어지던 작업을 자동화하면서 정부와 사업에 거대한 이익을 가져왔다. 그러나 사회 시스템 규모는 예측 불가능할 정도로 계속 커졌다. 20세기 초 세계 인구는 거의 두 배가 되었다. 세계 무역과 운송 네트워크는 서로 연결되었다. 기술, 과학 수준이 높아졌고, 데이터는 폭발적으로 늘어났다. 컴퓨터는 미래 혁신을 위한 발판을 마련했지만 전기 기계식 컴퓨터는 유지 보수 비용이 많이 들고 오류가 발생하기 쉬워졌으며 크기 또한 거대해졌다. 가장 크기가..

Computer Science 2020.09.06

#.1 초기 컴퓨터 Early Programming

** 이 글은 Youtube채널 CrashCourse - Computer Science 영상을 보고 제 맘대로 정리한 내용입니다. 정확하지 않은 정보가 포함되어 있을 수 있습니다. ** Computer is Everywhere. 스마트폰이나 컴퓨터에는 수십억 개의 트랜지스터가 있다. 그러나 겁 먹을 필요 없다. 컴퓨터는 많은 단계를 추상화하여 복잡한 작업을 실행하는 단순한 기계일 뿐이다. 첫 시간에는 이 추상화된 단계를 분석한다. 위대한 Carrie Anne선생님 0과 1의 개념 논리 단위 CPU 운영체제 전반적인 인터넷 개념과 그 외 컴퓨터의 기원 출처:CrashCourse Youtube channel 기원전 2500년, 메소포타미아에서 주판이 사용 되었다. 주판은 점점 커져가는 사회 규모, 인구, 자..

Computer Science 2020.09.06

객체지향1

📚 자바의 정석을 정리한 내용입니다. 객체지향 코드 재사용 유지보수 용이 신뢰성 높은 프로그래밍 클래스와 객체 클래스란 객체를 정의해놓은 일종의 설계도다. 도대체 클래스를 왜 만드는데? 클래스는 일종의 부품이 아닐까? 이를테면 거대한 우주선을 만든다고 하자. 수만가지의 부품이 필요하다. 그렇다고 우리가 그 많은 부품들 직접 만들어서 쓰지 않는다. 이미 누군가 만들어놓은 부품을 그대로 가져와서 쓰는 것이 (합리적이랄 것도 없이)당연한 선택이다. 물론 없는 부품은 직접 만들 수도 있다. 사용자 정의 타입처럼. 아무튼. 클래스로 객체를 만드는 과정을 클래스의 인스턴스화라고 한다. 만들어진 클래스를 우리는 객체(=인스턴스)라고 부른다. 객체의 구성요소 속성property과 기능function이 있다. prope..

Java 2020.09.06

Java란?

📚 자바의 정석을 정리한 내용입니다. 자바란? 썬 마이크로 시스템즈Sun Microsystems에서 개발하여 1996년 1월에 발표된 객체지향 프로그래밍 언어 이 분이 자바를 만든 제임스 고슬링James Arthur Gosling이다 특징 JVM(Java Virtual Machine)을 이용하기 때문에 운영체제에 독립적 객체지향언어(순수하지는 않은 듯) 자동으로 메모리를 관리하는 Garbage Collection JVM Java Virtual Machine. 자바로 만든 애플리케이션은 모두 JVM 위에서 실행된다. 따라서 OS만 거쳐서 컴파일되는 언어에 비해 약간 느리다는 단점이 있다. (byte code를 바로 기계어로 변환해주는 JIT컴파일러 도입으로 지금은 많이 개선됨) 대신, OS에 종속적이지 않..

Java 2020.09.06

일기

신세경은 인터뷰에서 그런 말을 한 적 있다. 퇴보할 수 있다고. 시대에 뒤쳐지는 것이 아니라, 내가 선택한 길이 옳지 못하다고 판단하면, 스스로 퇴보할 것이라고. 다시 원점으로 돌아와서 어떤 것이 더 좋은 선택이었을지를 고민하고, 또 틀릴지도 모르지만 그럼에도 불구하고 다시 무언가를 선택해보려는 시도는 어딘가 감동적이다. 이건 어떤 훌륭한 이야기의 결말 같다. 옳다고 믿고 선택한 일이, 후에 잘못된 일이었다는 사실을 깨닫고 스스로 물러서는 이야기. 그렇게 다시 원래 서 있던 자리로 돌아와서 잠깐 움크리고 있다가, 결국엔 다시 일어나 나아가는 이야기. 스탠 바이 미의 꼬마들처럼. 난 매일 쓰는 인간이었다가, 거의 매일 쓰는 인간이었다가, 가끔 쓰는 인간이었다가, 이제 거의 쓰지 않는 인간이 되었다. 여기서..

메모 2020.08.31