블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total633,817
Today41
Yesterday88
프로그램을 하는 사람들이라면 당연히 데이터베이스에 대해서 한번쯤은 들어보거나 생각해 보았을 것이다. 가장 대표적인 상용 데이터베이스인 오라클은 아는 사람들이라면 다 안다는 구글만큼 영향력이 있는 데이터베이스이다.


데이터베이스는 무엇일까?
가장 간단하게 이야기한다면 데이터를 저장해놓는 곳이다. 책들에 대한 정보, 회원들에 대한 정보, 스포츠 기록에 대한 정보등, 거의 모든 데이터가 데이터베이스에 들어가게 된다. 단지 데이터만을 넣어두는 곳이 큰 의미를 갖는것일까? 물론 아니다. 데이터베이스는 데이터의 저장소인 동시에 관리자이기도하다. 엄청나게 많은 양의 데이터들을 문제가 발생하지 않게끔 관리를 해주는 모든 행위를 포함하는 것이 데이터베이스라고 할 수 있다. 그래서 일반적인 DB라기 보다는 DBMS(DataBase Management System) 라는 이름으로 더 많이 사용되기도 한다.

대용량의 데이터.
많지 않은 양의 데이터라면 데이터베이스가 필요할까 하는 생각이 든다. 그냥, 텍스트 파일로 저장을 해 놓으면 되지 않겠는가? 아님 엑셀파일로 저장을 해도 쉽게 불러서 사용할 수 있을텐데 하는 생각... 하지만, 데이터베이스가 관리하는 데이터의 수는 우리가 상상하지 못한만큼의 많은 양의 데이터를 처리하게 된다. 이렇게 많은 양의 데이터를 처리하게 되면 의도하지 않았던 데이터가 생성되거나, 오류가 발생하는 일이 생기게 되는데, 이런 작은 문제들 때문에 전체적인 로직이 실행되지 않는 참사가 일어나기도 한다. 단 몇만분의 오차를 억제하기 위한 것이 데이터베이스인것이다.


데이터베이스의 종류
현재 많은 사람들이 사용하고 있는 데이터베이스에는 오라클, MySQL, MS-SQL, CUBRID 등이 있다. MySQL과 큐브리드는 다양한 기능들을 무료로 사용가능하다. 하지만, 중소규모에 한정된다는 단점이 있다. 오라클의 경우는 가장 대용량의 데이터를 효율적으로 처리할 수 있는 기능이 있기 때문에 중소 이상의 기업이나, 다양한 데이터를 제공하는 웹 서비스업체에서는 오라클의 데이터베이스를 많이 사용하고 있다. 데이터베이스에 사용되는 언어를 쿼리문이라고 하는데, 이 쿼리문은 거의 모든 데이터베이스에 비슷하게 사용되고 있다. 물론 세부적인 문법의 사용에 있어서는 다르지만, 기본적인 부분에서는 비슷하다. 물론 각 데이터베이스의 특화된 기능을 사용하기 위해서는 그 데이터베이스에 대해서 좀더 심도있게 배워야 할 것이다.

Posted by seanhigher

댓글을 달아 주세요

String 은 자바에서 빼놓을 수 없는 클래스 타입의 자료형이다. 아마 String 이 없었다면, 수많은 사람들이 자바 프로그래머의 길을 포기해야 했을지도 모른다. String 에는 한가지 중요한 비밀이 숨겨져 있다.


String 데이터를 생성하는 방법.

String str1 = "문자열";
String str2 = "문자열";
String str3 = new String("문자열");

위에 있는 세개의 데이터의 차이는 무엇일까? 정답은 어느것은 같은 것이고 어느것은 다르다는 것이다. 분명히 세개의 자료형에 똑같이 "문자열"이란 데이터를 넣었는데 같은것과 다른것이 있다니... 하지만 분명 차이는 있다. String 은 클래스형의 데이터 타입이라고 했다. 그것은 그 변수가 데이터를 갖고 있는 것이 아니라, 데이터가 있는 주소값을 가지고 있다는 것이다. 또 String 은 데이터를 만들기전에 자신과 똑같은 데이터가 있는지 검사를 한뒤 똑같은 데이터가 있다면 새로운 데이터를 생성하지 않고 똑같은 데이터가 있는 그 위치를 가리키게 된다. str1의 주소값과, str2의 주소값은 동일한 것이되고, 가리키는 데이터도 같은 값인 것이다. 하지만, new 연산자를 사용할 경우에는 똑같은 데이터가 있는지 검사하지 않고 무조건 새로운 String 데이터를 만들게 된다. 가지고 있는 주소값은 다른 것이지만, 그곳에 있는 데이터를 비교하게 되면 똑같은 데이터값을 갖고 있는 것이다.


String 데이터를 비교하는 방법
일반적으로 기본형 데이터를 비교하기 위해서는 '==' 연산자를 사용해서 비교하는 것이 가능하다. 하지만, 문자열을 'str1 == str2' 와 같은 방법으로 비교할 경우에는 '문자열' 과 '문자열'이 같은지를 비교하는 것이 아니라, str1이 가지고 있는 주소값과 str2가 가지고 있는 주소값을 비교하게 된다. 물론 위의 경우에 str1 과 str2는 같은 값을 갖는다는 결과를 내겠지만, str1 == str3 의 경우에는 다르다는 결과를 낼 것이다. 그렇다면 포함되어 있는 문자열을 그대로 비교하고 싶다면?? String 클래스에 구현되어 있는 equals() 메소드를 사용하여 비교하는 것이 가능하다. str1.equals(str3) 과 같은 방법으로 비교를 하게 되면 각 데이터가 가지고 있는 실제값을 비교하여 같다는 결과 값을 반환할 것이다.


String 은 변하지 않는다.
String 클래스에는 문자열을 조작하기 위한 다양한 메소드들이 준비되어 있다. concat() 란 메소드는 원래의 스트링에 인자값으로 전달받은 스트링을 더하는 역할을 한다.

String str1 = "첫번째";
String str2 = "두번째";
str1.concat(str2);

위의 소스를 실행하면 str1 에는 어떠한 데이터가 들어 있을까? '첫번째 두번째' 라는 데이터를 생각했겠지만, str1 에는 원래의 '첫번째' 라는 데이터만 들어 있다. 그 이유는 스트링 클래스의 메소드를 통해 문자열 조작을 하게될 경우 변형된 스트링을 반환하지만, 그 값까지 변하지는 않는다는 것이다. 만일 위의 소스에서 맨 마지막 줄을

str1 = str1.concat(str2);

와 같은 방법으로 사용한다면 str1에는 변형된 데이터가 다시 대입되는 형태를 띄기 때문에 str1에는 우리가 예상했던 '첫번째 두번째' 가 저장되어 있을 것이다.

Posted by seanhigher

댓글을 달아 주세요

사계절이나, 요일, 달 등은 명확한 데이터값을 가지고 구분이 되는 데이터들 중 하나이다. 이러한 종류의 데이터들을 사용하기 위해서 변수명과 정수의 숫자들을 대입하여, 데이터들을 구분할 수 있었다. 그러나 그 값이 정수라는 것이 조금은 불편하게 느껴질 때도 있었다. JDK 5.0 에서부터는 이러한 문제들을 개선하기 위한 새로운 데이터 형을 제안하였다.


열거타입의 데이터 사용.
열거타입은 정해진 데이터를 구분하기 위해 변수명에 정수를 대입해서 사용하는 대신에, 데이터와 변수명을 동일하게 사용하게 된다. 하나의 묶음으로 선언되는 열거타입의 데이터를 자바에서는 클래스의 하나로 인식을 하고 실행하게 된다. 사계절이란 열거타입을 선언하는 방법은 다음과 같다.

enum 사계절 {
    봄, 여름, 겨울, 가을
}

언뜻 보면 배열의 선언 방법과 매우 비슷하다. 사용법이나 구성도 매우 비슷하긴 하지만, 그 값이 인덱스값이라는 점에서는 차이가 있다. 열거 타입으로 선언한 '사계절'에서 '여름'의 데이터를 사용하고 싶다면,

사계절 season = 사계절.여름;

과 같은 방법으로 선언하고 사용하는 것이 가능하다. season 이라는 변수안에 '여름' 의 열거타입 데이터가 들어가 있는 것이다.


클래스 내부에서의 열거타입.
만일 클래스 내부에서만 열거타입의 데이터를 사용하고 싶다면 클래스 내부에서 선언을 하면 된다. 하지만, 다른 클래스에서 이 열거타입의 데이터를 사용하고자 한다면, 클래스 이름을 통해 접근을 하는 것도 가능하다.

class 좋아하는것 {
    enum 사계절 {
        봄, 여름, 가을, 겨울
    }
}

좋아하는것.사계절.봄;


기본으로 생성되는 values(), valueOf() 메소드.
열거타입을 선언하고 사용하게 되면 values() 와 valueOf() 라는 메소드가 기본적으로 생성이 된다. values() 메소드는 열거타입안에 선언된 모든 데이터를 배열의 형태로 반환해주는 역할을 하게 되고, valueOf() 메소드는 열거타입 상수를 인자로 넘겨주면 그 값을 리턴해 주는 역할을 한다.


다른값을 갖는 열거타입.
열거타입의 변수를 선언하게 되면, 그 값과, 인덱스(또는 키)가 동일한 값을 갖게 된다. '사계절'에 '여름'을 저장하면 '여름' 이라는 값만을 반환하게 되는 것이다. 만일 '여름' 이라는 데이터를 호출할때 'summer' 이라는 데이터를 갖고 싶다면, 다음과 같은 방법을 활용할 수 있다.

enum 사계절 {
    봄("spring"), 여름("summer"), 가을("fall"), 겨울("winter");
    final private String name;
    사계절(String name) {
        this.name = name;
    }
    String value() {
        return name;
    }
}

위의 방법은 생성자 파라미터 값으로 각 데이터 값을 전달해 줌으로써 value() 라는 메소드로 연관된 값을 반환 받는 것이다. name 변수명이나 value() 메소드의 경우는 개발자가 임의의 이름으로 변경하여 사용하는 것이 가능하다. 이러한 방법은 열거타입을 좀더 다양하게 사용할 수 있는 방법을 제시해 줄 것이다.

Posted by seanhigher

댓글을 달아 주세요

클래스 형태의 데이터 타입을 사용하게 되면 또 하나의 막강한 기능을 사용할 수 있다. 상속을 통한 확장과, 다양한 형변환을 통해, 언제 어떤 형태로든 데이터를 사용하는 것이 가능해 진다. 물론, 변환하고자 하는 데이터형에 알맞아야 한다는 불변의 조건이 있지만...



데이터 형변환하는 캐스팅.
자바의 기본 데이터에서는 캐스팅을 통해 더 큰 형태의 데이터로 형변환을 하는 것이 가능하다. 이것은 클래스를 사용하는 데이터 형에서도 사용이 가능하다. '사람' 이라는 클래스와 이것을 확장하는 '학생' 이라는 클래스 데이터형이 있다면, '학생' 이라는 클래스 데이터는 '사람'이라는 데이터 형태로 형변환이 가능하게 된다.

학생 홍길동 = new 학생();
사람 사람1 = (사람)홍길동;

서로 다른 데이터 형이지만, 동일한 데이터 형으로 취급하여 사용하는 것이 가능하게 된다. 그리고 위에서 만든 홍길동은 '사람' 이외에도 'Object' 형태로의 형변환이 가능한데, 이것은 모든 클래스가 기본적으로 Object 를 상속받아 만들어졌기 때문이다. (자바 API 를 보면 모든 클래스가 Object 를 상속받는 다는 걸 알 수 있다.) 그렇기 때문에 모든 데이터형을 한꺼번에 처리하고자 한다면, 'Object' 의 형태로 데이터를 선언하고 사용하면 될 것이다. 하지만, 그만큼 안정성은 보장하지 못한다는 사실도 기억해야 한다.


강제적인 캐스팅 확인하기, instanceof 연산자.
사실 위와 같이 하위 클래스에서 상위 클래스로의 형변환은 궂이 선언하지 않아도 자동으로 상황에 맞추어 형변환이 이루어진다. 반대로, 하위로 형변환을 하게 될 경우에는 꼭 원하는 데이터 형으로 형변환을 선언해 주어야 한다. 하지만, 이리저리 데이터들이 이동을 하고 자주 형변환이 이루어지는 과정에서 이 데이터가 내가 생각하는 데이터가 맞는지 고민을 하게 되는 경우가 생기기도 한다. 이럴때 사용할 수 있는 것이 instanceof 연산자이다. 이것은 대상 데이터가 비교하고자 하는 데이터 형태로 형변환이 가능한지는 확인해주는 역할을 하게 된다. '사람' 타입으로 변형된 '홍길동' 을 다시 학생으로 돌려놓고 싶은데, 그것이 가능한지 알고 싶다면 다음과 같은 방법을 사용할 수 있다.

if(홍길동 instanceof 학생)
    학생 새홍길동 = (학생)홍길동;

이런 클래스의 형변환은 다양한 데이터를 좀더 효율적으로 사용할 수 있도록 해준다. '사람1' 과 '홍길동' 은 서로 다른 데이터 형으로 만들어 졌지만, 형변환으로 통일된 데이터 형을 가짐으로써 하나의 로직으로 좀더 많은 데이터를 수용하는 것이 가능해지는 것이다.

Posted by seanhigher

댓글을 달아 주세요

클래스가 존재하는 이유는 무엇일까? 이미 알고 있는 지식들로 이야기하자면, 객체를 만들어 사용하기 위해서이고, 다양한 API로 사용을 하기 위해서라고 할 수 있다. 하지만, 그런것들은 우리가 쉽게 접근할 수 없는 부분이기도 하다. 우리에게 클래스가 존재하는 가장 큰 이유는 나만의 '로봇' 들을 만들기 위해서이다.


기본형 데이터, 레퍼런스형 데이터.
자바에서는 기본적으로 쓰이는 데이터 형에는 byte, short, int, long, float, double, char, boolean 의 여덟가지가 있다. 혹시나 센스있는 사람이라면, String 이 빠져있는것에 대해서 의구심을 갖게 될 것이다. String 이 빠져있는 이유는 String 은 기본 데이터 형이 아닌, 클래스이기 때문이다. 하지만, '문자열' 이라는 데이터는 워낙에 많이 사용되는 것이라 무의식중에 기본 데이터 형이 되어버린 것이다. 그렇다면 String 이 클래스라는 소리는 무엇일까? String 이 클래스라는 이야기는 우리가 만들 수 있는 모든 클래스들이 String 처럼 데이터형으로 사용될 수 있다는 이야기가 된다.


더욱 확장된 데이터형.
하지만, 우리가 일반적으로 사용하는 데이터형 외에도 일부러 클래스를 만들어 데이터형으로 사용할 필요가 있을까? 다음과 같은 경우를 생각해 볼 수 있다. 한 반에 있는 학생들의 데이터를 저장하고자 한다. 각 학생들에게는 국어, 영어, 수학, 과학 등의 점수와 합계, 평균등이 포함되어 있다. 기본 데이터 형으로 표현을 하고자 하면, 변수를 선언하는 것만으로도 엄청나게 많은 양의 메모리를 소모하게 된다. 배열로 묶어서 표현을 하고자 한다고 해도, 평균과 같이 소수의 수를 사용하는 경우에는 데이터 형이 달라서 묶을 수가 없다. 클래스를 사용한다면 쉽게 묶을 수 있다.

class 학생 {
    int 국어;
    int 영어;
    int 수학;
    int 합계;
    float 평균;
}



클래스 데이터형을 사용하기.
클래스로 만들어 놓은 데이터 형은 어떻게 사용할 수 있을까? 새로운 클래스 객체를 선언하고, 그 안에 데이터를 넣는 형식으로 사용하는 것이 가능하다.

학생 홍길동 = new 학생();

국어, 영어, 수학등의 점수를 넣기 위해서 '.' 연산자를 통해 클래스의 맴버 변수에 접근을 하는 것이 가능하다.

홍길동.국어 = 80;
홍길동.영어 = 70;
홍길동.수학 = 90;
홍길동.합계 = 홍길동.국어 + 홍길동.영어 + 홍길동.수학;

이 클래스의 데이터 형을 배열에 넣어서 사용을 하게 될 경우에는 더욱 더 다양한 사용이 가능하다. 수백명이나 되는 학생들을 한꺼번에 관리하는 것이 가능한 것이다. 클래스형의 데이터를 가지고 배열을 선언해 사용할 경우에는 한가지 주의해야 할 점이 있는데, 배열을 선언한 후에, 객체를 생성해 주어야 한다는 것이다.

학생[] 우리반 = new 학생[30];
학생[0].국어 = 80;

위와 같은 방법으로 배열을 생성하고, 데이터를 넣으려고 하면 에러가 발생한다. 클래스형의 데이터를 가지고 배열을 생성한다는 것은 단지 그만큼의 공간을 준비하는 작업뿐이기 때문에, 그 안에는 아무런 정보가 들어가 있지 않다. '학생[0].국어' 라는 이름으로 데이터에 접근해서 값을 대입하려고 해도, '학생[0].국어'라는 변수가 없기 때문에 접근을 할 수 없는 것이다.

학생[] 우리반 = new 학생[30];
학생[0] = new 학생();
학생[0].국어 = 80;

위와 같이 객체를 생성하는 과정을 거친 후에야 아무런 오류 없이 데이터를 사용할 수 있는 것이다.


기본데이터형과 레퍼런스 타입의 차이점.
이 두가지 데이터의 차이는 데이터를 어떻게 가지고 있느냐이다. 기본 데이터형은 그 변수 자체에 데이터를 가지고 있지만, 레퍼런스 타입은 데이터값을 가지고 있는 위치의 주소값을 가지고 있다. 그래서 포함된 데이터에 접근하기 위해서는 이차이상의 접근을 통해서 데이터 값을 갖게 되는 것이다.

Posted by seanhigher

댓글을 달아 주세요

먹는다라는 행동은 모든 생물에게 있어서 동일하게 적용이 된다. 하지만, 먹는 모양새가 모두에게 동일한 것은 아니다. 동물들같은 경우는 씹어먹는다고 할 수 있고, 식물들 같은 경우는 먹는다기 보다는 흡수에 가깝다고 할 수 있다. 이들이 모두 생물이라는 사실과, 먹는행동을 한다는 것은 같다.


오버라이딩의 개념.
오버라이딩은 쉽게 말하면 덮어쓰기를 하는 것이다. 상위 클래스를 상속받은 하위 클래스에서 상위클래스가 가지고 있는 메소드를 재 정의하여 자신에게 맞게 사용되는 것을 말한다. 만일 '생물' 이라는 클래스가 '먹는다' 라는 메소드를 가지고 있다고 가정해보자. '동물' 클래스와 '식물' 클래스는 생물을 상속받아서 생성이 가능하다. 하지만, 이것들이 '먹는다'라는 메소드를 통해 동일한 행동을 하기에는 조금 무리가 있다. 똑같이 먹는 행동을 하기는 하지만, 그 행동에는 현저한 차이가 있는 것이다. 이렇게 상속을 받지만 그 행동이 다를 경우 자신의 객체에서 새롭게 정의를 하는 기능이 메소드 오버라이딩이다.


메소드 오버라이딩 하기.
메소드 오버라이딩을 하기 위해서는 상위 클래스와 동일한 타입의 인자와 수를 일치 시킨 후 메소드를 정의하면 된다.

class 생물 {
    public void 먹는다() {
        에너지를 흡수한다;
    }
}

class 동물 extends 생물 {
    public void 먹는다() {
        음식물을 섭취한다;
    }
}


메소드 오버라이딩은 왜 필요한가??
궃이 메소드 오버라이딩이 없어도, 자신이 필요한 메소드를 생성하고, 선언해서 사용하면 별다른 문제는 없다. 그냥 선언해서 사용하면 되니까... 하지만, 메소드 오버라이딩은 매우 중요한 요소중의 하나이다. 이것은 자바에서 추구하는 다형성에서 그 원인을 찾을 수 있다. 자바에서는 다형성을 통해 다양한 클래스들이 서로 상관 관계를 갖게 되고, 각 클래스에 대해서 잘 알지 못하더라도, 상속과, 구현을 통해서 이미 만들어진 것들을 사용하는 것이 가능하다. 그리고 이 다형성의 특징 중 하나는, 동일한 Object 타입으로 묶을 수 있다는 것이다. 클래스의 형태를 따르는 각 객체들을, 그것을 상속받는 상위 클래스의 형태로 묶음으로써 좀더 편리하게 각 객체들을 관리하는 것이 가능한 것이다. 더욱이 중요한 사실은 이 객체들은 동일한 '먹는다' 라는 메소드를 실행한다고 할찌라도, 자기 자신에게 맞는 동물의 '먹는다'라는 메소드를 실행할 수 있게 된다. 각 클래스마다 다르게 구현을 할 필요없이, 메소드 오버라이딩을 통해서 한번에 로직을 작성하는 것이 가능한 것이다.

Posted by seanhigher

댓글을 달아 주세요

클래스를 사용하기 위해서는 객체화 시켜 이용을 하게 된다. 하지만 한가지가 아쉽다. 모든 객체에 상관없이 사용할 수 는 없는 것일까 하는 것. 만일 비디오를 대여하는 프로그램을 만들고자 할때, 아무리 많은 비디오 객체를 만들어도 그비디오의 재고는 객체와 상관없이 유지되어야 한다.



객체가 아닌 클래스에 소속된 것들.
클래스의 변수를 사용하기 위해서는 객체를 생성해야 하고, 그 객체를 가지고 각 맴버 변수들과 메소드에 접근을 하는 것이 가능하다. 같은 클래스의 변수들과 메소드일찌라도, 생성된 객체가 다르다면 전혀 다른존재가 되는 것이다. 서로간에 인자값으로 전달해주지 않는다면 서로 다른 객체간에 데이터값을 유지시킬 수 없게 된다. 하지만, 한가지 방법이 있다. 바로 정적 필드, 정적 메소드를 선언하는 것이다. 이렇게 정적으로 선언하게 되면, 이것들은 객체에 소속되는 것이 아니라, 그것이 선언된 클래스에 소속이 되는것이다. 객체로부터의 접근이 아닌, 클래스로부터 접근이 가능하게 된다.


정적 필드, 정적 메소드의 선언.
정적 필드, 정적 메소드를 선언하기 위해서는 필드와 메소드 앞에 static을 선언해주면 된다.
class A {
    static int a = 0;
    static void display() {
    }
}

위에서 선언된 a변수에 접근을 하기 위해서는 클래스의 이름인 A로 접근을 해야 한다. 객체를 생성하지 않은 상태에서 클래스의 멤버변수를 사용하는 것이 가능하다. a의 변수를 사용하기 위해서는 A.a라는 방식으로 사용할 수 있다. 동일하게 메소드에서도 A.display() 라는 이름으로 객체를 생성하지 않은체로 사용하는 것이 가능하다.


정적필드를 사용하면 좋은점과, 그렇지 않은 점.
이렇게 정적 필드를 사용하게 되면, 하나의 클래스에서 같은 데이터형에 접근을 하는 것이 가능하다. 변수를 사용하기 위해서 객체를 생성하지 않아도 되기 때문에 좀더 손쉽게 사용하는 것이 가능하다. 하지만, 이렇게 정적으로 선언한 필드의 경우에는 프로그램의 실행하면서 최초로 호출됨과 동시에 일부의 메모리를 할당받기 때문에 너무 남용하는 것은 좋지 않다. 그렇기 때문에 정적 필드를 사용하는 경우는, 그 클래스객체와 상관없이 모두에 동일한 값을 갖고자 할때, 상수를 변수처럼 사용하고자 할때 사용되게 된다.

Posted by seanhigher

댓글을 달아 주세요

클래스를 사용하기 위해서는 객체를 생성해야 사용하는것이 가능하다. 그리고 객체가 생성될때 클래스에서 꼭 이루어지는 것이 있는데, 바로 생성자를 호출하는 것이다. 생성자가 꼭 챙겨주지 않는다면, 생성자가 없다는 에러메시지를 만나도 적절하게 대응하지 못하는 불상사가 발생하고 말 것이다.


생성자는??
각 클래스의 객체가 생성될때마다 그 클래스 객체를 사용하기 위해서 꼭 선행되어야 할 일들이 있다. 하지만, 매번 그러한 일들을 일일이 선언해 주고 실행해 주어야 한다는 것은 굉장히 불편한 일이고, 비 합리적인 일이기도 하다. 이것은 자바가 추구하는 방법에 굉장히 위배되는 일이기도 하다. 그래서 자바의 클래스에는 이러한 역할을 해주는 것이 있는데, 이것이 바로 생성자이다.


생성자 사용하기.
생성자를 사용하는 방법은 매우 간단하다. 단지 클래스의 이름과 동일한 메소드를 만들고, 그 안에 하고자 하는 로직을 담아내면 된다.

class A {
    public A() {
    }
}


생성자 오버로딩.
생성자를 사용하는 또 하나의 이유는 동일한 클래스에서 다른 인자의 형태를 받기 위해서이다. 클래스의 생성자는 단 하나만 존재하는 것이 아니라, 각 인자의 타입과 갯수에 따라 수많은 종류가 존재하기도 한다. 이렇게 다양한 생성자를 갖는 것을 생성자 오버로딩이라고 한다. 인자의 타입과 갯수에 따라 다른 생성자가 호출되지만, 아무것도 정의되지 않을 경우에는 아무런 인자값을 갖지 않는 디폴트 생성자가 호출된다. 클래스를 만들때는 아무런 타입이 없는 디폴트 생성자를 선언해주는 것이 좋은데, 왜냐하면, 상속의 관계가 있을 경우 하위 클래스에서 맞는 생성자가 없을 경우 상위의 디폴트 생성자를 호출하기 때문이다. 만일 디폴트 생성자가 없다면 에러가 발생하게 되는데, 이런 생성자 관련 에러는 찾기가 힘든 경우가 대부분이다.

class A {
    public A() {}
    public A(int i, int j) {}
    public A(String str) {}
}



Posted by seanhigher

댓글을 달아 주세요

write a program to sort a list of names.
여러가지 이름을 입력받은 후, 입력받은 이름을 정렬하는 프로그램 작성.

Devist's thinks




Answer


 

'Dev Center > ThinkBig' 카테고리의 다른 글

스트링 정렬하기.  (0) 2010.08.03
숫자로 만든 피라미드.  (0) 2010.08.02
대소문자 바꾸기.  (0) 2010.07.30
문자열 나누기!  (2) 2010.07.29
텍스트 파일 복사하기  (0) 2010.07.28
텍스트 파일에 포함된 단어의 갯수 세기.  (0) 2010.07.27
Posted by seanhigher

댓글을 달아 주세요

다음과 같은 숫자의 형태로 이루어진 피라미드를 만들어보자.
          0
       2  4  6
 8  10  12  14  16


Devist's thinks



Answer

'Dev Center > ThinkBig' 카테고리의 다른 글

스트링 정렬하기.  (0) 2010.08.03
숫자로 만든 피라미드.  (0) 2010.08.02
대소문자 바꾸기.  (0) 2010.07.30
문자열 나누기!  (2) 2010.07.29
텍스트 파일 복사하기  (0) 2010.07.28
텍스트 파일에 포함된 단어의 갯수 세기.  (0) 2010.07.27
Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함