- Today
- Total
목록Languages/Java (11)
개발하는 고라니
Spring을 사용해보았다면 필요한 객체를 주입받는 @Autowired 어노테이션을 알 것이다. 이는 어플리케이션 전체에 공유되는 하나의 객체를 Spring IoC 컨테이너에서 주입받아 사용하는 것인데, 이는 Singleton 패턴이라고 한다. Spring의 @Autowired를 사용하지 않고 모든 곳에서 공통으로 사용될 수 있는 하나의 객체를 만들어보자. 내용 3개의 컨트롤러와 3개의 View가 필요하다. AController, BController, CController /a/index.html, /b/index.html, /c/index.html 전역에서 쓰일 객체 SimpleStorage private Map map을 멤버로 갖는다. map은 key('a', 'b', 'c')로 value(List..
추상화 캡슐의 사용되는 공통분모를 잘라내는 것 (공통 분모의 캡슐화). 객체에서 공통된 행위나 속성을 추출하는 것 이라고 말할 수 있다. 상속 : 공통 부분을 뽑아 부모 클래스로 만드는 것 인터페이스 : 상속에서 나아가 개념(기능)만 추출하는 것 추상화로 만들어진 클래스는 다음 2가지의 중요한 특징을 갖는다. 추상 클래스는 뼈대이므로 절대로 실체화(객체화)되어서는 안된다. 공통 분모이기 때문에 그것만 가지고 객체화 하려고 했던게 아니므로 추상 클래스는 뼈대이므로 절대로 사용해서는 안되는 메서드를 가질 수 있다. 자식 클래스가 실수로라도 부모의 메서드를 사용하지 않게 하고, 동시에 반드시 자신의 것으로 구현해서 사용하라는 강제성 부여 가능 추상화는 Is A 상속이랑 비슷하나, 위의 2가지 특징이 다르다. ..
파일에서 문자열 데이터를 읽어 문자열 배열에다 저장하는 프로그램을 생각해보자. names.txt라는 파일에 다음과 같이 값이 있다. 강호동 유재석 하하 김지호 김현준 김태희 박민정 names.txt에서 데이터를 읽어들이기 위해 FileInputStream을 열어야 하고, 데이터를 받아오기 위해 Scanner를 생성해주자. String url = "names.txt"; String[] names = new String[10]; InputStream fis = new FileInputStream(url); Scanner sc = new Scanner(fis); 근데 문제가 있다. 파일의 입력을 계속 받아오긴 할텐데... 파일의 끝을 만나면 그만 읽어야할텐데, 그 끝을 어떻게 표현하지? Scanner를 이용한..
정수형 1차원 배열 arr을 인자로 받아 정수형 1차원 배열을 반환하는 메서드 shuffle이다. 이 메서드는 인자로 받은 배열을 무작위로 섞어준다. 보통 셔플을 하면 원소가 중복되지 않게하기 위해 부가적인 처리가 필요한 경우가 있다. 하지만 이같은 경우는 배열의 원소를 직접 다루는 것이 아닌, 배열의 인덱스를 사용해 Swap을 하므로 값의 중복이 일어날 일이 발생하지 않는다. static Integer[] shuffle(Integer[] arr) { Random ran = new Random(); Integer[] result = arr; for(int i=0; i
상속이라는 단어는 아마 대부분 알 것이라고 생각된다. Java에서의 상속은 무엇일까? 자식 클래스가 상속받고 싶은 부모 클래스를 선택해서 물려받는다. 이때 상속받는 클래스 = 자식/하위/서브 클래스, 상속을 해주는 클래스 = 부모/상위/슈퍼 클래스 라고 한다. Java에서는 'extends' 키워드를 사용해 상속을 선언한다. 자식 클래스가 상속을 하게되면 부모 클래스의 필드와 메서드를 물려받는다(능력 및 기능을 제공받는다). 하지만 부모 클래스 멤버의 접근 제어자가 'private', 'default'라면 상속은 받을 수 있지만 접근은 어렵다. 그리고 자식 클래스가 여러 부모로부터 다중 상속받는 것은 불가(단일 상속)하다. 반대로 부모 클래스는 여러 자식 클래스에게 상속을 해주는 것이 가능하다. Has ..
자바는 대표적인 객체지향 언어 중 하나이다. 그러나 '객체'가 무엇인지도 모르고 쓰는 경우가 있다. 우선 객체란 무엇일까? 사실 객체(Object)는 어려운 개념이 아니다. 우리 주변에 있는 모든 것이 객체이다. TV, PC, 노트북, 스마트폰, 사람, 의자 등등... 실세계는 객체들의 집합이다. 실세계의 객체들은 자신만의 고유한 특성(State)과 행동(Behavior)을 가지며 다른 객체들에게 행동을 요구하거나 정보를 주고받는 등 상호 작용을 하면서 살아간다. 컴퓨터 프로그램의 예를 들면, 테트리스 게임에 나오는 각 블록들, 한글 프로그램의 메뉴나 버튼들이다. Java의 객체 지향 특성 객체지향 언어는 실세계의 객체를 프로그램 내에 표현하기 위해 클래스(Class)와 객체(Object) 개념을 도입하..
최단 경로 알고리즘에서 다익스트라 알고리즘을 공부하는데 '우선 순위 큐'를 이용하면 시간 복잡도를 획기적으로 줄일 수 있다는 방법을 알게되었다. 그래서 우선순위 큐의 간단한 사용법을 알아보고자 한다. PriorityQueue 도로에서 차량의 우선순위를 생각해보면, 보통 먼저 진입하는 차가 먼저 가게 되지만, 구급차 혹은 소방차가 나타나면 모든 차들은 긴급한 차량을 위해 도로를 양보한다. 이런 긴급 차량들은 도로 교통법에 의해 우선 순위를 갖는다. 컴퓨터에서도 우선순위의 개념이 필요할 때가 있다. 예를 들어 네트워크 패킷 중에서도 네트워크 관리와 관련된 패킷은 다른 일반 패킷보다 우선 순위를 갖는다. 우선순위 큐는 이러한 우선 순위의 개념을 큐에 도입한 자료구조이다. 보통 큐는 선입선출(First-In F..
람다식 Programming 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어이다. 실무적으로 코드의 간결함, 지연 연산을 통한 처리 능력 향상 그리고 기존 순환 관련 코드를 구현하는데 있어 불필요한 부분들을 제거할 수 있다는 점에서 중요하게 다루어진다. # 장점 코드의 간결성 효율적인 람다 함수의 사용을 통해 불필요한 루프의 삭제가 가능하고, 함수의 재활용 여지가 커진다. 필요한 정보만들 사용하는 방식을 통한 퍼포먼스 향상 - 지연 연산을 지원하는 방식을 통해 효율적 증대를 기대할 수 있다. # 단점 모든 원소를 전부 순회하는 경우 람다식이 좀 더 느리다. (어떤 방법으로 만들어도 최종 출력되는 byte code나 assembly code는 단순 반복문보다 몇 단계를 더 거치게 된다) 익명 함수의 ..