clearRect()메소드를 이용한 Canvas 화면 지우기Canvas의 Context에는 clearRect()의 메소드가 존재한다.이 메소드는 사각형 영역을 지우는 메소드 인데, 4개의 파라미터를 필요로 한다. => clearRect(x, y, w, h)캔버스안에서 특정 영역을 지울 때 사용하는데, x = 0, y = 0, w = width, h = height로 설정하면 캔버스의 전체영역을 지울 수 있게 된다.12var canvas = document.getElementById("canvas");canvas.getContext("2d").clearRect(0, 0, canvas.width, canvas.height);cs
프로그래밍 노트
캔버스 요소 HTML의 는 웹페이지에서 그래픽적인 것을 그릴 때 사용된다. src 및 alt 속성이 없다는 점만 제외하면 요소와 비슷하게 보인다. 요소에는 width와 height 두 속성만 존재한다. 요소와 달리, 요소는 닫는 태그 가 필요하다. 렌더링 컨텍스트 요소는 고정된 크기의 드로잉 영역을 생성하며, 그 영역은 보여질 컨텐츠를 생성하고 다루게될 두가지 이상의 렌더링 컨텍스트를 노출시킨다.(2D, 3D) 캔버스는 처음에 비어있으며, 무언가를 표시하기위해서는 어떤 스크립트가 랜더링 컨텍스트에 접근하여 그리도록해야 한다. 요소는 getContext() 메서드를 호출해서, 랜더링 컨텍스트와 그리기 함수들을 사용할 수 있다. var canvas = document.getElementById("test")..
Map 구현체 TreeMap이진검색트리의 형태로 키(Key)와 값(Value)의 쌍으로 이루어진 데이터를 저장한다. 검색과 정렬에 적합한 컬렉션 클래스이다.HashMap이 TreeMap보다 검색에 관한부분은 성능이 더 뛰어나므로 HashMap을 사용하는 것이 좋고,범위검색이나 정렬이 필요한 경우에는 TreeMap이 더 유리하니 TreeMap을 사용하면된다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public class TreeMapTest { public static void main(String[] args){ Strin..
Map 구현체 HashMapHashtable과 HashMap은 Vector와 ArrayList와 같은 관계이다. (새로운 버전인 HashMap을 사용할 것을 권장하고 있다.)Map의 특징, 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다는 특징을 갖고있다.그리고 해싱(hashing)을 사용하기 때문에 데이터검색에 뛰어난 성능을 보인다. 12345678public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{ transient Entry[] table; static class Entry implements Map.Entry{ final Object key; Object value; }}Col..
Set 구현체 TreeSetTreeSet은 이진검색트리(binary search tree)라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다. 이진검색트리는 정렬, 검색, 범위검색(range search)에 뛰어난 성능을 보이는 자료구조이며, '레드-블랙 트리'로 구현되어 있다.(이미지 출처) 이진 트리(binary tree)는 링크드리스트처럼 여러 개의 노드가 서로 연결된 구조로, 각 노드에 최대 2개의 노드를 연결할 수 있으며 '루트(root)'라고 불리는 하나의 노드에서부터 시작해서 계속 확장해 나간다.이진트리의 노드를 코드로 표현하면 다음과 같다.12345Class TreeNode{ TreeNode lfet; // 왼쪽 자식노드 Object element; // 객체를 저장하기 위한 Tre..
Set 구현체 HashSetSet인터페이스를 구현한 가장 대표적인 컬렉션으로, Set의 특징대로 중복된 요소를 저장하지 않는다.HashSet의 특징을 이용하면, 컬렉션 내의 중복된 요소들을 쉽게 제거할 수 있다.(이미지 출처) ArrayList와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하고자 하면 LinkedHashSet을 사용해야 한다.123456789101112131415161718192021public class HashSetTest { public static void main(String[] args){ Integer[] intArr = {4, 4, 5, 6, 1, 1, 1, 2, 2, 3, 3, 7, 8,}; // HashSe..
팩토리빈과 팩토리 메소드 팩토리메소드를 통한 인스턴스 생성은 XML에서 어떻게 표현할 수 있을까? (spring xml factory) 생성자 대신 오브젝트를 생성해주는 코드의 도움을 받아서 빈 오브젝트를 생성하는 것을 팩토리 빈이라고 부른다. 빈 팩토리와 비슷하지만 전혀 다르니 혼돈 ㄴㄴ 팩토리 빈 자신은 빈 오브젝트로 사용되지 않는다. 대신 빈 오브젝트를 만들어주는 기능만 제공해줄 뿐이다. 팩토리 기능을 가진 빈을 통째로 사용하는 방법도 있지만, 특정 빈이나 클래스의 팩토리 메소드를 사용해서 빈을 등록하는 방법도 있다. 1. FactoryBean 인터페이스 new 키워드나 리플렉션 API를 이용해 생성자를 호출하는 방식으로는 만들 수 없는 JDK 다이내믹 프록시를 빈으로 등록하기 위해 FactoryB..
초기화 메소드(initialization method) 초기화 메소드(initialization method)는 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다. 오브젝트의 기본적인 초기화 작업은 생성자에서 진행하면 된다. 하지만 DI를 통해 모든 프로퍼티가 주입된 후에야 가능한 작업도 있다. 이런 경우 사용할 수 있는것이 초기화 메소드다. 초기화 메소드를 지정하는 방법은 네 가지가 있다. 1. 초기화 콜백 인터페이스InitializingBean 인터페이스를 구현해서 빈을 작성하는 방법이다. InitializingBean의 afterPropertiesSet() 메소드는 이름 그대로 프로퍼티 설정까지 마친 뒤에 호출된다.하지만 권장되지 않는다. 빈 코드에 스프링 인터페이스를 노출..
StringBuffer아래의 코드를 살펴보자1234567public String joinWords(String[] words) { String sentence = ""; for(String word : words) { sentence += word; } return sentence;}Colored by Color Scriptercs이 코드는 문자열 배열을 하나로 합쳐서 리턴해주는 함수이다. 언뜻보아서는 아무런 문제가 없어보이지만 이 코드의 실행 시간은 어떻게 될까?간단하게 문자열 길이는 전부 x라고 하고 문자열 개수는 n이라고 해보자. 문자열을 연결할때 마다 새로운 문자열 객체가 만들어지고 (sentence), 연결할 문자열의 값이 문자 단위로 복사된다. 그러므로 첫 번째 루프에서 x개의 문자가 복사되고..
ArrayListArrayList는 동적으로 크기가 늘어나는 배열이다. 그러면서도 O(1)의 접근시간(access time)을 유지한다. 배열이 가득 차는 경우, 그 크기가 두배 늘어나도록 구현되어 있다. 크기를 두배 늘리는 시간은 O(n)이지만 자주 일어나지 않기 때문에 O(1)시간이 유지된다고 보면 된다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778public class CustomArrayList { private int size = 0; private static final int ..