2014년 6월 12일 목요일

[Java] 클래스, 객체, 메서드

클래스

  • 정의 : 클래스란 객체를 정의해 놓은 것이다.
  • 용도 : 클래스는 객체를 생성하는데 사용된다.
  • 데이터와 함수의 결합(기능[method] + 속성[variable])
  • 구조체와 다른점 : 구조체는 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장하는 공간이지만 클래스는 기능을 수행하는 method의 기능도 수행한다.


객체의 정의

  • 정의 : 실제로 존재하는 것, 사물 또는 개념
  • 용도 : 객체가 가지고 있는 기능과 속성에 따름
  • 속성(property) : 멤버변수, 특성, 필드, 상태
  • 기능(function) : 메서드, 행위, 함수
  • 인스턴스와 객체는 같은 의미이다.

변수

  • 종류 : 클래스 변수, 인스턴스 변수, 지역 변수

  • 클래스 변수
    • 선언위치 : 클래스 변수
    • 클래스가 메모리에 올라갈 때 생성된다.
    • static, coast
  • 인스턴스 변수
    • 선언위치 : 클래스 변수
    • 인스턴스가 생성될 때 생성된다.
  • 지역 변수
    • 선언위치 : 지역 변수가 생성된 메서드, 생성자 등의 영역
    • 선언된 위치가 수행될 때, 수행 후 소멸한다.

메서드

  • 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다.
  • 반복적으로 수행되어야 하는 여러 문장을 하나의 메서드로 정의해 놓으면 좋다.
  • 관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다

리턴타입 메서드이름(타입 변수명, ... ...){
코드
}




메서드가 종료하는 2가지 종류

  • 메서드의 블럭 {} 내의 마지막 까지 수행하였을 경우
  • 메서드의 블럭 {} 내에 있는 문자열 수행 중 return문을 만났을 경우

  1. 반환값이 없는 경우 ( 리턴타입이 void 인 경우)
    • return;
      • return만 써주면 된다.
  2. 반환값이 있는 경우 ( 리턴타입이 void가 아닌 경우)
int add(int a, int b){
int c = a + b;
return c;
}

메서드의 호출
  • 참조변수.메서드이름();
  • 참조변수.메서드 이름(값1, 값2);
  • 같은 클래스 내의 메서드 끼리는 참조변수를 사용하지 않는다.
  • 서로 호출이 가능하다
  • static 메서드는 같은 클래스 내의 인스턴스를 호출 할수 없다.

[Java] 배열

배열
  • 많은 양의 데이터를 손쉽게 다룰 수 있다.

배열의 선언

int[] number;
//또는
int number[];


배열의 생성

new int[5];
//크기가 5인 int형 객체를 생성


배열의 초기화

//1. 직접 초기화, 제일 비효율적
int[] number = new int[5];
int[0] = 0;  int[1] = 1;  int[2] = 2;  int[3] = 3;  int[4] = 4;
//2. 
int[] number = {0,1,2,3,4};
//3.
int[] number = new int[]{0,1,2,3,4};

배열 복사 생성하기

System.arraycopy(arr1,0,arr2,0,arr1.length);
//-> arr1[0]에서부터 arr1.length 만큼의 값을 arr2[0]으로 복사한다.

[Java] 연산자

연산자

종류 및 우선순위

  1. 단항연산자
    • ++, --, +, -, ~, !
    • 연산 방향 : ←
  2. 산술연산자
    • *, /, %, +, -, <<, >>, >>>
    • 연산 방향 : →
  3. 비교연산자
    • <, >, <=, >=, instanceof, ==, !=
    • 연산 방향 : →
  4. 논리연산자
    • &, ^, |, &&, ||
    • 연산 방향 : →
  5. 삼항연산자
    • A?B:C
    • A는 조건부, 조건부가 참일 경우 B실행, 거짓일경우 C실행
  6. 대입연산자
    • =, +=, -=, %=, /=, <<=, >>=, >>>=, &=, ^=, |=
    • 연산 방향 : ←

모든 프로그래밍이 그렇듯이 조금씩 해보는 것이 암기보다 훨씬 좋다

단항연산자
  • 전위형 : 값이 참조되기 전에 연산한다.
  • 후위형 : 값이 참조된 후에 연산한다.

//전위형
int a = 1;
int b = ++a;
//대입 연산을 하기 전에 증가하기 때문에 a 값에는 2,b 값에도 2가 저장된다.

//후위형
int a = 1;
int b = a++;
//대입 연산을 한 후에 증가시키기 때문에 a 값에는 2,b 값에는 1이 저장된다.


산술연산자

  • 모든 이항 연산자는 연산을 수행하기 전에 크기가 4byte 이하인, 즉 byte, char, short, boolean의 자료형을 int으로 변환하여 연산한다.
  • 피연산자들의 타입을 서로 일치시킨다. 여기서 피연산자 중에서 자료형의 범위가 더 큰 자료형으로 맞춰서 형변환이 된후 연산을 수행한다.
    • float+int → float+(float)int
    • double+byte → double+(double)byte
  • 0으로 나누는 것은 불가, 0.0f 또는 0.0d로 나누는 것은 오류발생은 일어나지 않지만 infinity 또는 NaN(Not a Number)의 결과가 나온다.
    • 0으로 나누면 java.lang.ArithmeticException 이와 같은 오류 발생

쉬프트 연산자

>>, <<, >>> 가 있다.

>>

  • 값을 2진수로 표현하였을 경우 값들을 오른쪽으로 한 단위씩 이동시킨다. 
  • 첫 자리 단위의 보호를 위하여 이전의 값이 0이라면(양수라면) 0으로 채우게되고
  • 1이라면(음수라면) 1로 채우게된다.
  • x>>n 은 x의 2진값을 오른쪽으로 n개만큼 이동시킨다. 이 때 값은 x/ 2^n의 결과와 같다.

<<
  • 값을 2진수로 표현하였을 경우 값들을 왼쪽으로 한 단위씩 이동시킨다. 
  • 맨 오른쪽의 자리는 0으로 채우게 된다.
  • x<<n 은 x의 2진값을 왼쪽으로 n개만큼 이동시킨다. 이 때 값은 x* 2^n의 결과와 같다.
>>>

  • 기본적으로 >> 와 같지만 첫자리의 수가 무조건 0으로 채워진다.

    [Java] 형 변환

    형 변환이란?
    • 변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것이다.
    int a = (int)70.5;
    //a=70
    

    double 값을 70.5를 int 형 값 70으로 변환하여 a에 저장한다. 0.5의 데이터 손실이 일어난다.


    char b = (char)65;
    //b='A'
    int c = (int)b;
    //c=65
    int d = (int) 10.7f;
    //d=10
    //손실 발생
    float e = (float) d;
    //e=10.0f
    //복구 되지 않음
    

    2014년 6월 11일 수요일

    [Java] 데이터 타입

    데이터 타입을 구분하고 사용하는 목적은 크게 2가지로 나뉜다.
    • 사용할 데이터의 크기를 정하여 메모리를 할당한다.
    • 사용에 따른 데이터의 형태를 구분한다.
    Stack에 저장되며 Java에서는 unsigned 정수타입을 제공하지 않는다.


    기본데이터 타입
    • 논리형 : boolean
      • True, false 중 하나를 사용
    • 문자형 : char,        (*String은 참조형 변수이다.)
      • 문자를 저장하는데 사용, 변수당 하나의 문자
    • 정수형 : byte, short, int, long
      • 정수의 값을 저장하는데 사용, 주로 int, long을 사용
      • byte는 주로 이진데이터 처리를 위해 사용되며
      • short는 c언어와의 호환을 위해서 추가되었다.
    • 실수형 : float, double
      • 실수값을 저장하는데 사용한다. 


    Stack에 저장되며 Java에서는 unsigned 정수타입을 제공하지 않는다.


    참조형 데이터 타입

    위의 데이터 타입을 제외한 모든 타입을 참조 데이터 타입(Reference Data type)이라고 부르며 메몰에 객체 주소값만 저장한다. Heap에 할당되며 배열도 참조형 변수이다. 메모리 주소를 직접 참조하는 것은 불가능하다. 대표적인 참조 데이터 타입으로는 String이 있다.

    [Java] 변수

    변수란?
    • 단 하나의 값을 저장 할 수 있는 공간이다.

    선언하기

    int number;
    //(변수의 타입) (변수의 이름)

    명명 규칙
    • 대소문자가 구분되며 길이에 제한이 없다.
      • (Abc != abc)
    • 예약어를 사용할 수 없다.
      • int(x),true(x)
    • 숫자 시작은 안된다.
      • 1bc(x)
    • 특수문자는 _ 와 $ 만이 허용된다.

    프로그래머 관습

    • 클래스의 첫문자는 항상 대문자로 사용한다.
    • 여러 단어로 이루어진 이름은 단어의 첫글자를 대문자로 사용한다.
    • 상수의 이름은 모두 대문자로 한다.
    • 여러단어 사이에는 _ 로 구분한다.

    변수의 타입
    • 기본형, 객체의 값을 저장한다.
      • boolean, char, byte, short, int, long, float, double
    • 참조형, 객체의 주소를 저장한다.
      • 기본형을 제외한 나머지

    2014년 6월 2일 월요일

    [mysql] 테이블 삭제 수정, 제약조건


    테이블의 이름을 변경
    • ALTER TABLE [변경 전 이름] RENAME [변경 후 이름];


    테이블 레코드 삭제 하기

    • DELETE FROM [테이블 명] WHERE [조건];
      • where 절이 없을 경우 모든 테이블의 값이 삭제된다. (테이블은 살아있음)


    테이블 컬럼 추가하기

    • ALTER TABLE [테이블 명] ADD [컬림이름] [컬럼타입 및 크기] [제약조건];
      • 제약조건은 필수는 아니다.

    테이블 컬럼 특정위치에 추가하기
    • alter table [테이블명] add [컬럼이름] [컬럼타입] after [위치할컬럼명];

    테이블 컬럼 특정위치에 추가하기 순서 변경하기
    • alter table [테이블 명] modify [컬럼이름] [컬럼타입] after [위치할컬럼명];
    제약조건, 컬럼타입 수정하기

    • ALTER TABLE [테이블 명] MODIFY [컬럼이름] [변경 후의 타입 및 크기] [제약조건];
      • 타입이나 제약조건 1개이상 작성