9월, 2017의 게시물 표시

JAVA 쓰레드(Thread)

이미지
쓰레드 프로세스내에서 프로그램의 흐름을 형성하는 주체를 쓰레드라고 함 하나의 프로세스 내에 둘 이상의 쓰레드가 존재할 수 있기 때문에 프로세스 내에서 둘 이상의 프로그램 흐름 형성 가능 쓰레드는 자신만의 메모리 공간을 할당 받아 별도 실행흐름 형성 main 메소드도 쓰레드에 의해 실행 되고, 이 외에 다른 쓰레드가 실행되는 중에 main이 종료되어도 다른 쓰레드는 계속 실행됨 쓰레드는 자바 가상머신에서 생성하기 때문에 인스턴스와는 다름 쓰레드는 생성하는 방법 Thread 클래스를 상속하는 방법  혹은 인터페이스를 활용한 구현 ex)Runnable 인터페이스를 구현하고 이로 만들어낸 인스턴스를 Thread 클래스로 받아와서 인스턴스를 생성하여 쓰레드 생성 및 실행 join 메소드는 쓰레드의 작업이 끝날 때 까지 대기하는 메소드 쓰레드의 스케쥴링 둘 이상의 쓰레드가 생성되는 것을 대비해 가상머신이 실행하는 것 원칙은  우선순위가 높은 쓰레드 우선실행 동일한 우선순위의 쓰레드가 둘 이상 존재할 때는 CPU 할당시간 분배해서 실행 CPU의 할당이 힐요치 않은 입출력을 처리하는 상황에서는 쓰레드는 CPU를 차지하지 않고 다른 쓰레드에게 넘겨주어서 우선순위가 낮은 쓰레드들이 실행이 될 수 있는 기회를 제공 쓰레드의 싸이클              New : 클래스가 키워드 new를 통해 인스턴스화 된 상태 Runnable : start메소드가 호출되어 실행 대기 상태 Blocked : Sleep, Join 같은 메소드로 CPU를 다른 쓰레드에게 양보한 상태 Dead : run 메소드를 빠져나와 쓰레드의 실행을 위해 할당 받았던 메모리를 비롯, 각종 쓰레드 관련정보가 완전히 사라진 상태 쓰레드의 메모리구성 run 메소드가 호출되고 이 안에서 다른 메소드를 호출하며 main 메소드와 다른 흐름을 형성하는데 이는 별도의 스택이 쓰레...

JAVA 컬렉션 프레임워크(Collection Framework)

컬렉션 프레임워크 기본적으로 자바에서의 "프레임워크" => "잘 정의된, 약속된 클래스들" 컬렉션이란,  데이터의 저장 이와 관련된 알고리즘을 구조화 해 높은 프레임워크 쉽게 자료구조와 알고리즘을 클래스로 구현해 놓은 것 컬렉션 프레임워크를 구성하는 클래스들은 많은 양의 인스턴스를 다양한 형태로 저장하는 기능 제공 이를 통해 다양하고 효율적으로 인스턴스 저장 가능 Colleection <E> 이 인터페이스를 구현하는 제네릭 클래스는 모두 인스턴스를 저장 대상으로 삼음 차이는 중복 저장 허용 유무, 저장 시 정렬 유무 List<E> 동일한 인스턴스 중복 저장 허용 인스턴스 저장 순서 유지 ArrayList<E>와 LinkedList<E>가 있음 ArrayList의 특징 저장소 용량 늘리는데 많은 시간소요 삭제에 연산과정이 김 참조가 용이하여 빠른참조가능 LinkedList의 특징 저장소 용량 늘리는 것이 간단 삭제 간단 참조가 다소 불편 iterator Iterator<E> iterator()로 Collection<E>에 정의되어 있음 Iterator 에 정의된 메소드 boolean hasNext() 참조할 다음 번 요소가 존재하면 true 반환 E next() 다음번 요소를 반환 void remove() 현재 위치의 요소를 삭제 이 인터페이스를 활용할 때는 반복자를 주로 활용하는데, 이는 저장되어 있는 자료들 전체를 검색하기에 알맞고, 저장방식을 다른 클래스로 바꿀 때 수정을 많이 안해도 되는 장점이 있기 때문 기본자료형을 저장하는 것이 제네릭 기반으로는 불가하다 하였지만, 이를 대신하여 Auto Boxing, Unboxing을 이용하여 자료형 변환하지 않고 저장 Set<E> 저장순서 유지하지 않음 중복저장 허용하지 않음 집합같은 특징을 지님 HashSe...

JAVA 제네릭(Generic)

제네릭(Generic) 컴파일 과정에서 단순히 자료형을 Object로 선언해 놓는다면 에러를 구분하기 힘듦 그렇다고 각각의 자료형을 따로 선언하기에는 코딩 줄 수가 늘어나는데 이것을 보완하기 위해 사용하는것이 제네릭 <T> => 매개변수화된 자료형 정보를 인자로 전달해야 함, 이는 클래스 내의 T를 대체하는 인스턴스가 생성 될 것 사실상 실무에서는 잘 사용하지 않지만 라이브러리 성격의 클래스가 상당수를 제네릭 기반으로 변경되었기 때문에 알아야 함 제네릭 메소드는 자료형 위치에 제네릭임을 명시하여 사용 제네릭 메소드에서 강제로 형변환을 하여 자료형을 제한가능 하지만 이는 인터페이스를 구현하지 않은 인스턴스나 클래스를 상속하지 않은 인스턴스의 참조 값이 메소드에 전달 되어도 컴파일 및 실행이 가능해짐 그로인해 제네릭의 장점을 없애는 것이기 때문에 <T extends Somemethod>와같이 명시할 때 제한을 하는 방법을 사용. 이때, 상속과 구현 모두 extends를 사용 제네릭 매개변수를 배열 인스턴스로 제한도 가능함 ex) T[] arr 상속관계에 있다하더라도 제네릭상에서도 상속관계를 갖는 것이 아니기 때문에 따로 지정을 해주어야함 이를 '와일드카드'를 이용하여 시행하는데 '?'가 와일드카드  ex) FruitBox<? extends Fruit> 에서의 <? extends Fruit>이 의미하는 바가 "Fruit을 상속하는 모든 클래스"      =>이로인해 참조가능 한 것이 new FruitBox<'Fruit class' or 'Fruit을 상속하는 class의 이름'>이 됨 와일드 카드는 하위 클래스를 제한하는 용도로도 사용가능  ex)FruitBox<? super Apple> 에서는 "Apple이 상속하는 모든 클래스" 제네릭은 인터페이스로도 구현 가능 ...

유스케이스 다이어그램을 만드는 이유

유스케이스 아이어그램은 소프트웨어 구조 다이어그램이 아니다. 이 소프트웨어를 어떻게 만들 것인지 시스템 구조에 대한 내용은 전혀 포함되어 있지 않다. 단지 액터 별로 어떤 기능을 이용할 수 있는지를 보여준다. 이 다이어그램은 소프트웨어를 만드는 사람과 소프트웨어 제작을 의뢰한 사람 사이의 의사소통에 도움을 주기 때문에 작성한다. 유스케이스는 여러명의 액터가 있을 때 각 액터 시점에서 기능을 볼 수 있게 도와준다. 예를 들어 '직원 근태 프로그램'을 만들고 싶고 액터가 '사원'과 사원들의 근태를 관리하는 '관리자' 두 개라고 할 때, 각 액터는 유스케이스를 보고 내가 사용할 수 있는 유스케이스를 파악할 수 있다. 마틴의 문서화 제1법칙 : 그 필요가 급박하고 중요하지 않다면 아무 문서도 만들지 마라. 지금 당장 우리에게 유스케이스가 필요한지 아닌지 내 수준에서 딱 잘라 말할 수 없지만 유스케이스를 만들기로 한 이유는 어떤 기능들을 구현해야 하고 JH와 내가 어떻게 작업을 나눠서 진행하는게 좋을지 결정하는데 도움이 될 것 같아서 이다. 물론 유스케이스 자체를 더 공부하고 직접 그려보고 싶은 마음도 있었다.

JAVA 메모리 모델 /Object Class /기본 Class

메모리 모델 자바 가상머신은 운영체제 위에서 동작 운영체제에서 메모리를 할당받아 사용되며 이를 관리하게 세가지로 나뉘는데 종류와 저장되는 파일들은 메소드 영역 - 메소드의 바이트코드, static 변수 스택 영역 - 지역변수, 매개변수 힙 영역 - 인스턴스 메소드 영역 실행 흐름을 형성하는 메소드의 바이트코드를 저장시키는 부분 바이트 코드와 static 변수는 '클래스가 메모리에 올려지는 시점'에 저장됨 메소드의 바이트코드는 프로그램의 흐름을 구성하는 바이트 코드이고 사실상 컴파일 된 바이트 코드의 대부분이므로 바이트 크도 전체가 메소드영 역에 저장된다고 봐도 무방 스택 영역 메소드 내에서만 유효한 변수인 지역변수, 매개변수를 저장 즉, 스택으로 관리하기 편한 변수들을 저장 관리하는 것 힙 영역 인스턴스는 소멸방법과 시점이 지역변수와 다르기 때문에 따로 저장 인스턴스로 힙에 저장되고 변수들은 이 인스턴스를 참조하는 형식으로 사용 Garbage Collection 자바에서 인스턴스를 힙에서 소멸시키기 위해 사용하는 것 null로 참조변수를 해당 인스턴스를 가르키기 않도록하여 소멸시킴 Object 클래스 모든 자바 클래스의 최상위 클래스 finalize 메소드 인스턴스가 소멸되기 전 가상머신에 의해 자동 호출되는 메소드 이를 제대로 활용하기 위해선  System.gc();  System.runFinalization(); 를 사용하면 제대로 사용 가능 equal 메소드 public boolean equals(Object obj)로 정의되어 있고 '=='연산자 처럼 참조 값을 비교하도록 오버라이딩 하여 사용가능 String 클래스의 경우는 이미 내용비교를 오버라이딩 하였으므로 그대로 사용가능 clone 메소드 인스턴스를 복사하는 메소드 Cloneable 인터페이스를 구현해야 함 비어있는 인터페이스 복제가 가능하다는 것을 표현하기 위해서 ...

테트리스 게임 시스템 요구사항1

책 제목: 클린 소프트웨어 부제: 애자일 원칙과 패턴, 그리고 실천 방법 로버트 C.마틴 지음 | 이용원, 김정민, 정지호 옮김 출판사: Jpub 이 책의 597페이지를 보면 UML 표기법에 대해 소개하고 있다. 책에서는 '교육 과정 등록 시스템'을 예를 들어 UML로 분석, 설계하는 과정을 소개하고 있다. 나는 우리가 진행할 '테트리스' 프로젝트를 이용해서 이 책을 따라가 보려고 한다. <테트리스 게임 시스템 요구사항> 사용자는 자신의 이름을 입력한다. 사용자는 연습 모드와 대전 모드, 게임 종료 중에 선택할 수 있어야 한다. [연습모드] 사용자가 연습 모드를 선택하면 난이도를 선택할 수 있어야 한다. - easy - moderate - difficult 사용자가 대전 모드를 선택하면 아이템전과 노템전 중에 선택할 수 있어야 한다. [대전모드] 사용자가 아이템전을 선택하면 마찬가지로 아이템전을 선택하고 대기 중인 다른 사용자와 대전을 할 수 있어야 한다. 사용자가 노템전을 선택하면 마찬가지로 노템전을 선택하고 대기 중인 다른 사용자와 대전을 할 수 있어야 한다. 시스템은 다른 사용자를 찾는 동안 다른 사용자를 찾고 있음을 사용자에게 알려줘야 한다. 시스템은 30초 동안 다른 사용자를 찾지 못한 경우 사용자에게 알리고 계속 다른 사용자를 찾을 것인지 대전 모드를 취소할 것인지 물어본다. 사용자가 계속 찾기를 원한다면 30초 동안 찾고 대전 모드 취소를 원한다면 다시 연습 모드와 대전 모드 중 선택할 수 있도록 해야 한다. [게임 시작/조작] 사용자가 연습 모드를 선택하고 3초 후 블럭이 내려오기 시작해야 한다. 사용자가 대전 모드를 선택하고 다른 사용자와 연결 되고 3초 후에 블럭이 내려오기 시작해야 한다. 사용자는 키보드의 좌우 화살표 키로 블럭을 좌우로 이동할 수 있어야 한다. 키보드 상 화살표 키로 블럭을 전환할 수 있어야 한다. 키보드 아래 화살표 키로 ...

JAVA 예외처리(Exception Handling)

예외처리 예외처리를 if문으로 할경우 if문은 보통 자주 사용되는 구문이기 때문에 예외처리와 일반 코드가 구분이 어려움 이 때문에 사용하는 것이 Exception try~catch try영역에서 나온 예외상황을 catch 부분에서 처리하는 것 실행 과정은 예외발생 -> 참조값 전달하며 catch영역 실행 -> catch영역 실행 후 try~catch 다음문장 실행 예외클래스라는 예외상황을 알리는 클래스들이 있음 getMessage() 예외상황을 알리기 위해서 정의된 모든 예외클래스들이 상속하는 메소드 이며 예외상황의 이유를 알림 하지만, 간혹 null만 반환하는 경우가 있으니 의지해선 안됨 이미 약속된 예외상황을 알리는 클래스들이 있음 ArrayIndexOutOfBoundsException : 배열의 접근에 잘못된 인덱스 값을 사용 ClassCastException : 허용할 수 없는 형변환 연산을 진행 NegativeArraySizeException : 배열선언 과정에서 배열의 크기를 음수로 지정 NullPointerException : 참조변수가 null로 초기화 된 상황에서 메소드를 호출 try 영엑에 둘 이상의 catch 영역 구성 가능 이는 catch문이 쓰여진 순서대로 관찰하기 때문에 상위 클래스인 Throwable을 먼저 사용하면 다음 영역에선 실행이 되지않음 하지만 순서를 바꾸어서 사용한다면 실행은 가능 finally try 영역으로 일단 들어가면 무조건 실행되는 영역 예외의 상황 직접 정의 Exception 클래스 예외를 정의하기위해 상속을 해주는 클래스 Throwable 클래스의 하위 클래스 생성자 호출을 통해서 전달된 문자열을 getMessage의 호출을 통해서 반환 메소드의 뒤에 throws를 통해 정의된 클래스에 보냄 -> 그리고 throw excpt를 통해 예외처리 메커니즘을 가동 이는 try~catch를 사용하지 않아도 사용가능 예...

Java 복습 및 IntelliJ 단축키

JAVA 복습 다시한번 기억해야 할 부분만 정리했고, 이 외에는 더욱 기본적인 부분은 혼자서 코딩하는 걸로 대체하여 복습했다. 앞으로 공부할 자바의 내용들은 "난 정말 JAVA를 공부한 적이 없다구요 - 윤성우" 를 바탕으로 정리한 내용들이다. 콘솔 입력     ex) import java.util.Scanner;          Scanner sc = new Scanner(System.in); for-each 구문 모든 배열의 요소를 참조하기 위해 사용하는 반복문  for(int e : arr)     System.out.print(e+" "); => arr내의 모든 값 출력 상속 extend를 이용해 사용하며 상속받는 클래스는 상위 클래스의 변수, 메소드 사용가능 private (클래스 내부) < default (동일 패키지) < protected (상속된 값) < public (그 이외) Overiding 하위 클래스에서 메소드를 다시 정의하는 경우 상위의 메소드가 아닌 하위의 메소드가 호출되어 실행됨 상위의 메소드를 호출하고 싶다면 super를 사용 instanceof 상속관계를 바탕으로 형변환이 가능한지를 묻는 연산자  상속은 설계과정 내에서 계획적으로 이루어져야함 final class는 상속을 허용하지 않겠다는 의미, final method는 overiding이 불가능하다는 의미 IntelliJ 단축키 단축키는 지금까지 적절히 썼던 것들만 정리했고 추후에 더 추가할게 있으면 해야할 것 같다 Ctrl + Shif + /  : /*....*/ 주석처리 Ctrl + / : //주석처리 Ctrl + Space : 기본적인 자동 완성 기능 Ctrl + Shift + Space : SmartType Auto Completion 기능...

JAVA 툴들의 비교

 기존에 처음 Java를 배울 떄는 Eclipse로 배웠기 때문에 Eclipse가 좀 더 익숙하지만, IntelliJ가 좋다는 추천을 하여 우선 Java툴들을 찾아보고 각 각의 특징에 대해 먼저 알아보았다. JAVA의 대표적인 툴 3가지가 있는데 Eclipse NetBeans IntelliJ IDEA 이렇게 세가지가 있다. 각각의 특징들을 보면 Eclipse 무료로 사용가능한 개발툴로서 많이 사용되는 편 오픈소스 쪽 개발자들이 이클립스 개발, 업데이트에 많이 참여 웹 개발에 특화되어 잇고, 서버사이드 개발자들이 많이 애용 NetBeans 초기 많이 사용되었으나 웹 기술 발달로 사용자 층 감소 java기반 윈도우 애플리케이션 개발시 유용 하지만 스마트폰 애플리케이션 개발이 많이 발전되며 더욱 사용자 감소될 것으로 보임 IntelliJ IDEA 유료로 사용하는 것이며 안정적인 성능과 기능 제공 학생용 라이센스를 활용하여 무료로 사용가능 하지만 무료인 이클립스와  그렇게 큰 차이를 보인다고 볼 수는 없음 Visual Studio에서 사용하는 Resharper라는 *리팩토링 툴을 사용함   리팩토링 툴  외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법, 소프트웨어 시스템을 변경하는 프로세스.  서투른 디자인을 가지고 재작업하여 잘 디자인된 코드로 바꾸어서 만들어냄 소스의 일관성이나 효율성, 시각성을 편리하게 사용함 http://sorrymommy.com/wp/2016/03/31/%EB%A6%AC%ED%8E%99%ED%86%A0%EB%A7%81refactoring-%EC%A0%95%EB%A6%AC/  -리펙토링 정리 < http://tworab.tistory.com/  참조>  간단히 특징들을 찾아보았는데, Eclipse와 IntelliJ는 큰 차이는 없는 것으로 보인다. 그래도 이번에...

9/11 프로젝트 회의

9/11 첫 회의 회의 주제 : 요구사항 분석 회의 시간 : 1시간 내외 논의 사항 : 테트리스 게임 내에 구현하고 싶은 부분  결정 사항    연습 모드 / 대전 모드  연습 모드 들어갈 때 난이도 선택  대전 모드 시 특정 콤보 달성하면 아이템 생성   랭킹 제공 (랭킹 옆에 최대 콤보 표시하기)  Stage올라갈수록 점수 많이 주기  추후 논의 사항 난이도 조정 방향 아이템 종류 Stage 당 점수 배점

JH's TIL

Farmer TIL1