2019년 4월 10일 수요일

자료형 연산자

## set은 집합(순서X, 중복X)
## List는 값의 나열(순서O, 중복O)
## tuple은 리스트와 유사하지만 읽기 전용( 리스트에 비해 속도 빠름)
>>> a = set((1,2,3))
>>> a
{1, 2, 3}
>>> type(a)
<class 'set'>
>>> b = list(a)
>>> b
[1, 2, 3]
>>> type(b)
<class 'list'>
>>> c = tuple(b)
>>> c
(1, 2, 3)
>>> type(c)
<class 'tuple'>


## &는 and 연산자와 동일. Java의 && 와 동일
>>> True & False
False
>>> True & True
True

## bool함수는 0이 아니면 참
>>> bool(0)
False
>>> bool(-1)
True

2014년 9월 10일 수요일

Thread

Process : 할당된 메모리공간을 기반으로 실행 중에 있는 P/G. Thread : Process내에서 P/G흐름을 형성하는 주체. Thread는 자신만의 메모리 공간을 할당 받아서 별도의 실행흐름을 형성. 즉, 별도의 실행흐름을 형성하기 위해서 자바 가상머신에 의해 만들어지는(또는 준비되는) 모든 리소스와 각종 정보들을 총칭해서 Thread라 한다. main메서드가 종료되어도 실행 중에 있는 Thread가 있다면, P/G은 종료되지 않는다. Thread는 자신만의 메모리 공간을 할당 받아서 별도의 실행흐름을 형성한다. 자바 가상머신은 start메서드의 호출을 요구하는 것이다. 메모리 공간의 할당 등 Thread의 실행을 위한 기반을 마련한 다음에 run메서드를 대신 호출해주기 위해서 말이다. 이는 우리가 main메서드를 직접 호출하지 않는 것과 비슷한 이치이다.

2014년 9월 8일 월요일

Enum

Enum은 method내에 위치할 수 없다.

interface and abstract class

interface는 interface를 implements할 수 없다. class는 interface를 extends할 수 없다. interface를 implements한 클래스는 interface의 메서드를 overriding하되 타입은 public이어야한다. abstract클래스는 abstract 메서드를 가지고 있거나, public 메서드를 구현한 상태여야한다. interface는 interface를 extends할 수 있다.

class type in java

By default, the classes visibility is package private, i.e. only visible for classes in the same package.

static, non-static var

static 메서드의 리턴타입은 static reference이다. 만일 static 메서드에서 non-static의 전역변수를 return할 경우, compile에러가 발생한다.

Boxing, UnBoxing, promotion, casting

boxing : 기본형 타입의 데이터를 참조형 타입으로 바꿔주는 것.
unboxing : boxing의 반대개념.

promotion : 작은 값을 큰 그릇에 대입하는 경우, 묵시적으로 형변환이 발생. 이를 promotion이라 한다.
casting : 큰 값을 작은 그릇에 대입하는 경우, 강제적으로 형변환 명시하여 사용한다. 데이터유실이 발생할 수 있다. (*참고로 boolean자료형은 형변환을 할 수 없다.)
promotion/casting관련 참조



method의 argument에서는 기본타입의 promotion이 일어나지 않는다.

 public static void go(short n){System.out.println("short");}
 public static void go(Short n){System.out.println("Short");}
 public static void go(Long n){System.out.println("Long");}
 
 public static void main(String[] args) {
  Short y=6;
  int z=7;
  long l=z;
  go(y);
  go(z);  //compile error. method의 argument에서는 기본타입의 promotion이 일어나지 않는다.
  go((long)z); //강제 casting을 통해 boxing이 발생하고 정상출력된다.
 }

2014년 9월 7일 일요일

다형성

메서드 위주로 간략화한 클래스 다이어그램



class안에서 class를 정의할 수 있으며, method안에서 class를 재정의 할 수 도 있다.
interface 내에서의 변수 은닉타입 지정의 범위: final, static, public

compare & compareTo

자바에서 객체간의 정렬을 위해서는 Comparator 인터페이스를 구현하고, compare메서드를 오버라이드해야한다.


 @Override
 public int compare(Object o1, Object o2) {
  Student snum1 = ((Student)o1);
  Student snum2 = ((Student)o2);
  
  if(snum1.getNum() > snum2.getNum()){
   return 1;  //순차정렬
  }else if(snum1.getNum() == snum2.getNum()){
   return 0;
  }else{
   return -1;
  }
 }

compare메서드의 두인자간의 비교결과에서 첫번째 결과값이 두번째 결과값보다 클 경우, 1을 리턴하면 순차정렬을 하고, -1을 리턴하면 역순으로 정렬을 한다.


문자열의 정렬을 구현할 경우 (기준:사전적정의에서의 순서), compareTo메서드를 구현한다.

 @Override
 public int compare(Object o1, Object o2) {
  String sc1 = ((Student)o1).getName();
  String sc2 = ((Student)o2).getName();
  
  return sc2.compareTo(sc1);  //역순, 순차정렬인 경우, sc1.compareTo(sc2)
 }

java collection framework(JCF)

Set : 순서 없고, 중복하여 객체삽입할 수 없음.
List : 순서 있고, 중복하여 객체삽입할 수 있음.
Map : 순서 없고, Key - Value를 한쌍으로 함. key에 대해 중복을 허용하지 않는다.