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

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total633,817
Today41
Yesterday88
write a program to convery uppercase to lower case  (e.g  BAE to bae)
대문자는 소문자로, 소문자는 대문자로 바꾸는 프로그램 작성하기.

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

댓글을 달아 주세요

다음과 같은 문자열이 있다. 
FPATH = "/home/mem/index.html"
이 문자열을
Extension = html
Filename = index
Path = /home/mem
와 같은 방법으로 나누어서 출력하도록 하자!


Devist's thinks



Answer


 

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

숫자로 만든 피라미드.  (0) 2010.08.02
대소문자 바꾸기.  (0) 2010.07.30
문자열 나누기!  (2) 2010.07.29
텍스트 파일 복사하기  (0) 2010.07.28
텍스트 파일에 포함된 단어의 갯수 세기.  (0) 2010.07.27
쓰레드를 보호하는 방법?  (0) 2010.07.11
Posted by seanhigher

댓글을 달아 주세요

  1. 2010.08.03 15:02 신고 닉쑤  댓글주소  수정/삭제  댓글쓰기

    지난번 텍스트 파일 복사하기, 단어 갯수 세기도 그렇고..
    프로그래밍 수업 레포트 감인데요? ㅋ
    잘 보고 갑니다~

"xanadu.txt" 라는 텍스트 파일이 있다. 이 텍스트 파일의 내용은... 
' In Xanadu did KuBLA KHan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Down to a sunless sea '
와 같다. 이 텍스트 파일을 그대로 복사해 "outagain.txt" 라는 파일로 생성해야 한다. 파일이 있던 폴더와, 새로 만들어진 폴더가 동일해야 한다는 사실에 주의하길...


Devist's thinks




Answer


 

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

대소문자 바꾸기.  (0) 2010.07.30
문자열 나누기!  (2) 2010.07.29
텍스트 파일 복사하기  (0) 2010.07.28
텍스트 파일에 포함된 단어의 갯수 세기.  (0) 2010.07.27
쓰레드를 보호하는 방법?  (0) 2010.07.11
멀티 쓰레드에서는 어떻게 될까?  (0) 2010.07.09
Posted by seanhigher

댓글을 달아 주세요

"sample.txt" 라는 파일에 다음과 같은 문자열이 입력되어 있다. "To teach a fish how to swim." 이 텍스트 문서 안에 포함되어 있는 단어의 갯수를 세는 프로그램을 작성해 보자!!


[출처] (초보님들을 위한)IO와 Sring 관련 문제 (자바/Java/C/C++ 개발자모임 [Code人/코드인]) |작성자 조병덕


Devist's thinks.




Answer

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

문자열 나누기!  (2) 2010.07.29
텍스트 파일 복사하기  (0) 2010.07.28
텍스트 파일에 포함된 단어의 갯수 세기.  (0) 2010.07.27
쓰레드를 보호하는 방법?  (0) 2010.07.11
멀티 쓰레드에서는 어떻게 될까?  (0) 2010.07.09
String API 활용  (0) 2010.07.07
Posted by seanhigher

댓글을 달아 주세요

상속의 방법은 부모의 능력을 자식들에게 전가해줄 수 있는 매우 좋은 방법중의 하나이다. 하지만 단 한가지 아쉬운점이 있다면, 단 하나의 클래스에서만 상속이 가능하다는 것이다. 아빠의 능력을 받게 된다면, 엄마의 모습을 갖을 수는 없는 것이다...



다중상속.
분명 상속은 단 하나의 클래스에서만 이루어지는데... 다중상속이란 말이 나오는 까닭은?? 단 하나의 클래스를 상속하는 것만으로는 자바의 무한한 확장성을 무시하는 처사밖에 되지 않는다. 그래서 약간은 편법적인 방법으로 하나 이상의 클래스에서 상속이 이루어지게끔 만들어 주고 있다. 대신에, 불법적인 방법을 사용하는 만큼 조금은 더 제약이 다른다는 사실을 명심해야 한다.


인터페이스.
다중 상속을 하기 위해서는 우선 가장 기본이 되는 골격을 상속받은 후, 필요한 맴버 필드나 메소드를 가지고 있는 클래스의 형태를 추가하는 형태를 갖게 된다. 하지만, 이것은 상속이 아닌, 인터페이스라는 형태로 제공된다. 이 인터페이스는 일반적인 클래스와는 다르게 모든것에 추상 메소드로 이루어져 있다. 모든 메소드가 추상 메소드로 구현되어 있다는 것은 이것을 상속받는 클래스들은 인터페이스 클래스에 속해있는 모든 메소드에 대해서 구현을 한 후에 사용을 할 수 있다는 것이다. 만일 동물이라는 클래스를 상속받은 고양이라는 클래스가 있다고 하자. 이 고양이라는 클래스는 날카로운 이빨, 줄무늬 라는 클래스들은 추가적으로 상속받으면서 호랑이의 모습을 갖게 된다. 날카로운 이빨 클래스에 속해 있는 빠른 움직임, 물어뜯기의 메소드들은 필수적으로 구현을 해야지만 가능하다는 사실이다.


인터페이스 다중 상속의 방법.
동물을 상속받는 고양이의 다중 상속은 다음과 같이 표현할 수 있다.

class 고양이 extends 동물 implements 날카로운 이빨, 줄무늬 {
    ... ...
    public void 빠른 움직임() {}
    public void 물어뜯기() {}
}

다중 상속을 위해서는 아무런 내용이 없더라도, 그것을 꼭 구현해 주어야 하는 번거로움이 있다. 하지만, 이 번거로움이 있을지라도, 충분히 다중상속의 확장성과, 가능성은 개발자로 하여금 꼭 필요한 기능임을 인식하게 만들어준다.

Posted by seanhigher

댓글을 달아 주세요

자바의 모든 클래스는 오브젝트 클래스로 부터 상속을 받아 만들어져 있다. 이것은 자바를 이용하는데 있어서 하나의 중요한 요점이 되기도 한다. 한 부모의 아래에 있다는 것은 모두 같은 유전자를 갖고 있다는 것. 동일한 속성을 사용할 수 있다는 것이다!



상속.
생물이라는 집단이 있다. 이 생물이라는 집단의 아래에는 동물도 있고, 식물도 있다. 동물과 식물은 살아있고, 자라나고, 무언가를 먹고 배설한다는 공통점을 가지고 있다. 이것은 생물이라는 상위 개념에서 그것을 그대로 가져온 것이기도 하다. 그리고 동물에는 조류, 양서류, 포유류, 설치류 등등의 다양한 종류들이 있다. 이것들은 하나같이 동물이 가지고 있는 특징을 그대로 가지고 있다. 이렇게 어떠한 객체에서 공통된 특징을 가지고 있는 것들을 상위 클래스라고 하며, 상위 클래스가 가지고 있는 특징들을 그대로 받아 새로운 객체고 구분지어지는 것을 상속받는다고 한다. 동물과 식물은 생물을 상속받았으며, 조류, 양서류, 포유류등은 동물을 상속받아 이루어진 것들이다.


상속의 표현.
동물이 생물을 상속받아 표현하는 것이라면 이렇게 표현을 할 수 있다.

class 동물 extends 생물 {
    ... ...
}

동물은 생물을 상속받았기 때문에 생물이 가지고 있는 모든것들을 그대로 사용하는 것이 가능하다. 그리고, 원래 있던것을 조금 변형시켜 사용하는 것도 가능하게 된다. 그리고 동물과 생물의 특징들을 개별적으로 사용할 수 있도록 super 와 this 라는 구분자를 제공하기도 한다. 동일한 이름의 메소드나 멤버 필드가 상속관계에 있는 두개의 클래스에 있을 경우에 super 는 그 상위 클래스의 맴버를 지칭하고, this 는 현재의 클래스에 속해 있는 멤버들을 지칭하게 되는 것이다.


자바의 최상의 클래스 Object.
자바의 모든 클래스는 하나의 클래스로부터 시작이 된다. 그 최 상위 클래스에는 Object 클래스가 자리하고 있는데, 이것은 자바의 무한한 확장성을 시사하는 바이기도 하다. 단 하나의 클래스로 부터 시작되었지만, 지금에 와서는 거의 대부분의 기능들을 구현하고, 지금도 수많은 개발자들에 의해서 점점 발전해 나가고 있는 것이다. 그리고 하나의 클래스로부터 분리된 자료형은 최상위 자료형인 Object 형을 갖으면서 모든 자료를 동일하게 평가하고, 기능을 부여할 수 있게 된 것이다.

Posted by seanhigher

댓글을 달아 주세요

  1. 2010.07.26 03:00 닉쑤  댓글주소  수정/삭제  댓글쓰기

    오랫만에 듣는 말이네요. 상속. ㅋ

    저 개념이 참 처음에는 왜그리 낯선지.. ㅋ
    그렇구나 하면서도 막상 프로그램 짤 떄는 햇갈리고. ㅎ

    포스팅만 모아놔도 책 쓰시겠어요. ㅎ 신입생들이 공부해도 되듯.
    잘 보고 갑니다~

프로그래밍을 이루는 기본, 뼈대가 되는 것은 반복문과 비교문이라고 할 수 있다. 이 두가지만으로도 프로그램의 논리적인 구조가 만들어지고, 개발자가 원하는 프로그램이 작성되는 것이다. 프로그램에서는 반복적으로 문장을 수해하기 위한 while 이 있다. 그리고 이것을 더 낳은 방법으로 사용할 수 있는 for 문이 있다.


반복은 하되, 조건에 맞추어서!
while 반복문을 사용하다보면, 반복문을 멈추게 하기 위한 조건을 위해서 무언가가 더 필요함을 느끼게 될 것이다. 정해진 횟수만큼을 반복하기 위해 비교를 위한 변수를 만들고, 변수를 변화시켜 주는 수식이 또 따라 붙어야 한다. 만일 '안녕하세요' 라는 단어를 10번 반복해서 출력을 하고 싶다면...

int i = 0;
while(i < 10) {
    System.out.println("안녕하세요");
    i += 1;
}

이렇게 프로그램을 작성하면 '안녕하세요'를 10번 출력할 수 있다.


좀더 나은 방법, for문을 이용하기.
위와 같은 반복은 프로그램을 작성하다보면 빈번하게 작성하게 된다. 그럴때마다 새로운 변수를 선언하고, while 문을 사용하는것 보다 훨씬 더 간편하게 for 문을 이용 할 수 있다.

for( int i = 0; i < 10; ++i)
    System.out.println("안녕하세요");

단 두줄 만으로 while 문을 작성하기 위해 사용했던 부수적인 요소들을 제거할 수 있다. for 문을 사용하는 것은, 이제 아주 필수적이 된다.


for 문을 사용하는 방법.
for문에는 세가지의 속성을 포함하고 있다. 이 세가지는 각각 세미콜론(;) 으로 구분되어 있는데, 필요하지 않은 속성이 있다면, 빈 공간으로 남겨두어도 사용하는 것이 가능하다. while 문에서 비교값을 'true' 로 했을때 무한 반복이 이루어지는 것처럼, for( ; ; ) 이라고 한다면 똑같은 효과가 일어날 것이다. 하지만, 꼭 세미콜론을 두개 넣어 비교를 해 주어야 한다. 각 부분에 들어가는 요소들을 비교해 보면, 첫번째로 들어가는 것은 초기값이다. for 문은 반복과 비교가 동시에 일어나는 명령문인데, 비교를 하기 위한 첫번재 요소의 값을 첫번째 부분에 넣는 것이다. 두번재는 while의 비교값과 같은 역할을 한다. 초기값을 비교하여 다음에 반복을 할것인지 안할 것인지를 결정짓는 것이다. 세번째 요소는 비교를 하기 위한 변수의 값을 어떻게 변화시킬 것인지의 식을 넣는 곳이다. 변수 i 를 사용한다면 i 에 1을 더할 것인지, 2를 더할 것인지를 결정짓는 것이다. 이 세가지 요소를 한번에 표현함으로 좀더 효율적인 프로그래밍이 가능한 것이다.

Posted by seanhigher

댓글을 달아 주세요

메트릭스의 세계는 아직도 많은 사람들이 기억하고 있을만큼 놀라운 세계였다. 그러한 상상의 세계를 다시 창조해낸 영화가 나타났다. 생각해 본다면 간단한 일일 수도있고, 우리가 모르는 사이에 이미 진행되고 있는 일일 수도 있다. 아무도 모르게 잠든 순간, 꿈과 현실의 위치가 뒤바뀔 것이다.


인셉션
감독 크리스토퍼 놀란 (2010 / 영국,미국)
출연 레오나르도 디카프리오,와타나베 켄,조셉 고든-레빗,마리안 꼬띠아르,엘렌 페이지
상세보기


꿈속에서의 전쟁
메트릭스에서는 우리가 살고 있는 이 세계가 컴퓨터에 의해 만들어진 가상의 세계였다. 모든 논리적인 구조가 사실적이긴 하지만, 받아들이는 우리들의 입장에서는 현실이라고 인지하기는 힘든 정도이다. 하지만, 이것은 전혀 그렇지 않다. 현실속에서 이루어지는 일들이다. 가끔씩 들리는 정신세계에 관한 연구가 그것이 사실임을 말해주는 듯 하다. 아니면 지금 이것이 바로 꿈속에서의 세계인것일찌도...


꿈을 훔치는 기술자.
아이디어 하나만으로도 전세계를 뒤엎을 수 있는 세상이 되었다. 페이스북도, 트위터도, 그리고 구글과 애플도 단 하나의 다른이들이 생각해내지 못했던 것들을 생각해 냄으로써 지금의 성공을 이루어 내게 되었다. 특별한 생각을 가지고 있는 사람에게 그 생각은 앞으로의 미래를 보여줄 재산과도 같은 것이다. 자신이 그 생각을 가지고 그것을 실현해 나간다면 그는 세상을 변화시킬 수 있는 잠재적인 능력을 갖게 되는 것이다. 이 특별한 생각을 내가 갖을 수 있다면?? 나에게는 절망과도 같지만, 나의 아이디어를 가진 사람에게는 새로운 기회가 될 것이다. 마치 돈을 훔쳐서 새로운 자산을 만들어내듯, 아이디어를 훔쳐서 자신의 것으로 만들어 내는 것이다. 마치, 그의 미래를 알게 되는 듯이...


꿈속에서의 꿈, 그리고 꿈...
꿈을 훔치기 위해서는 꿈을 훔치고자 하는 대상의 모든 것을 알아야 한다. 대상을 꿈속의 다른 세상으로 유인해 낸 후 생각을 찾아내는 것이다. 꿈의 세계를 설계하고, 그 세계안에 있는 대상의 생각을 찾아내는 것이다. 그리고 그 안에서 또 다른 꿈의 세게를 만들어 낸다. 꿈속에서의 세계는 실제 세계 시간보다 10배의 이상의 시간이다. 실제세계가 1분이라고 한다면 꿈속에서는 10분의 시간인 것이다. 하지만, 이것이 끝이 아니다. 꿈속에서 다시 꿈속으로 들어간다면... 현실의 1분은 꿈속의 꿈속에서 100분의 시간이 되는 것이다. 또 다시 그 꿈에서 꿈속으로 들어간다면... 1000분. 이런식으로 기하급수적으로 늘어나는 시간의 경험을 실제 세계에서의 경험으로 하게 되는 것이다. 무한한 꿈속의 세계에서 수십년의 경험을 하고도, 실제 세계에서는 수시간이 지났을 뿐인것이다.


인셉션, 생각을 만들어 내는 것.
꿈을 통해 생각을 훔쳐내는 것은 어렵지 않았지만, 전혀 있지 않은 생각을 다른사람에게 집어 넣을 수 있다면, 그것은 그 사람을 내 의지대로 조정할 수 있는 것이다. 이것은 업계의 거물들에게는 뿌리칠 수 없을 만큼 유혹과도 같은 것이다. 하지만 그것은 생각을 훔치는 것보다 몇배는 더 위험한 일이기도하다. 최고의 전문가들은 그것을 이루기 위해서 최고의 팀으로 무장을 했다. 꿈을 만들어내기 위한 최고의 설계사를 만들어내고, 꿈속으로 그들을 초대했다. 여전히 어디까지가 꿈인지... 어디까지가 현실의 경계인지를 기억하지 않는다면, 꿈의 어딘가의 깊은곳에 빠져버리고 말것이다.

Posted by seanhigher

댓글을 달아 주세요

프로그래밍을 하다보면, 분기문이나 반복문들 필수적으로 사용하게 된다. 그리고, 무엇보다 반복적인 비교문의 사용은 어쩌면, 개발자로 하여금 피곤함을 느끼게 하는 대목이기도 하다. 사지선다와 같이 입력해야 할 것이 정해져 있다면... 조금은 그 수고를 덜 수 있다.


다중 if else.
if 문을 사용할때는 그 결과같의 범위를 정해주게 된다. 가령 점수를 비교한다고 하면, 100 ~ 90 점 사이는 'A', 89 ~ 80 점은 'B', 79 ~ 70 점은 'C' 와 같은 식이다. 이것은 정확한 결과값을 필요로 하지 않을때 매우 유용하게 사용할 수 있는 방법이다.


사지선다, 오지선다.
하지만, 1 ~ 4번까지의 예를 들어주고, 그중에서 정해진 하나를 선택해야 한다면 if else 문의 활용은 왠지 낭비적인 문법이 될 수가 있다. 이럴땐 switch, case 문을 사용하여 좀더 효율적인 프로그래밍을 할 수 있다. case 문은 정해진 하나의 정수형을 받으며, 그것에 대한 비교만을 할 수 있게 되어 있다. 주어진 값이 '1' 일때, '2'일때, 아니면, 'a', 'b', '+', '-' 와 같은 기호들도 가능하다. 정수형, 문자형으로만 가능하다면!


switch case 사용하기.
'1' ~ '4' 의 예중에서 하나만을 선택해야 하는 것을 if else 로 표현하면...

int a = 2;
if( a == 1) System.out.println("1 입니다");
else if( a == 2) System.out.println("2 입니다");
else if( a == 3) System.out.println("3 입니다");
else if( a == 4) System.out.println("4 입니다");
else System.out.println("잘못된 숫자입니다.");

그렇게 복잡하진 않지만, switch, case 문을 사용하는 것이 조금은 더 현명한 선택이라고 할 수 있다. 입력받는 수가 정확한 정수형이라면!

int a = 2;
switch (a)
    case 1 :
        System.out.println("1 입니다.");
        break;
    case 2 :
        System.out.println("2 입니다.");
        break;
    case 3 :
        System.out.println("3 입니다.");
        break;
    case 4 :
        System.out.println("4 입니다.");
        break;
    default :
        System.out.println("잘못된 숫자입니다.");
        break;

case 부분에는 항상 break 문이 따라오게 되어있는데, 만일 이부분을 포함하지 않는다면, 조건이 만족하는 부분 이후의 모든 것들이 실행될 것이다. 위에서 모든 break 문을 제외하면 2, 3, 4 그리고 그 외의 모든 경우의 결과가 함께 출력될 것이다.


switch, case 문을 사용할 때의 주의할점.
switch(a) 에서 a 대신에 들어갈 수 있는 것은 정수형의 데이터 이거나, char 형의 데이터 이다. 만일 'a' 의 값이 논리형이거나, 그 외의 다른 값이라면 프로그램은 오류를 일으키게 될 것이다. case 문에서는 단 하나의 값만을 사용할 수 있다. 또한 중괄호를 사용하지 않고 실행문들을 표현한다는 것이 if 비교문과의 차이점이라고 할 수 있다.

Posted by seanhigher

댓글을 달아 주세요

프로그램을 실행했는데, 한번만 실행하고 땡(?) 이라면, 그 프로그램의 실용성은 엄청나게 떨어지게 될 것이다. 그만큼 프로그램을 지속적으로 만들어주는 것이 반복문의 사용이다. 한번 했던 작업을 또 다른 값에 대해서 다시금 사용할 수 있게끔 만들어 주는 것이다.


while 문의 기본적인 형태
while 문은 다음과 같은 형태를 갖는다.

while(비교식) {
    수행식;
}

while 문은 비교식이 참의 결과값을 갖게 될 경우에 괄호안의 수행식을 실행하게 된다. while 문을 사용할때는 항상 주의해야 할 것이 끊임없이 반복문을 실행하는 무한루프에 빠지지 않게끔 프로그램을 작성해야 한다는 것이다. 만일 비교식에 '10 > 1' 이라는 비교식을 넣는다면 항상 참이 되기 때문에 while 문 안의 수행식은 계속해서 반복을 하게 되고, 프로그램은 제대로 수행이 되지 않을 것이다. 그래서 while 문을 쓸때는 다음과 같은 형태로 많이 쓰이기도 한다.

int n = 0;
while(n < 9) {
    수행식;
    n = n + 1;
}

위의 프로그램은 수행식을 9번 수행을 하라는 뜻이다. 똑같은 작업을 여러번 반복해야 할때 매우 유용하게 사용할 수 있는 방법이다. 위와 같은 경우에서는 n 의 값을 0 에서부터 시작했는데, 만약 9 부터 시작을 하게 되면 수행식은 한번도 수행하지 않게 된다.


do ~ while 문
하지만 무조건 한번은 수행을 하고 싶다면 어떻게 해야 할까? 가장 손쉽게 생각할 수 있는 방법은 while 문을 만나기 전에 수행식을 한번 더 적어넣는 것이다. 하지만, 이것은 조금은 낭비스러운 코딩이다. 이럴때 사용할 수 있는 방법으로 do ~ while 문이 있다. do ~ while 문은 비교식을 비교하기전에 무조건 한번은 실행을 한 후에 비교식을 참조하여 다시 반복할 것인지를 결정하게 된다.

do {
    수행식;
} while(비교식);

do ~ while 문은 위와 같은 방법으로 사용하게 된다. 한가지 주의해야 할 점은 'while(비교식)' 이후에 꼭 세미콜론( ; ) 을 붙여주어야 한다는 것이다.

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

while 문을 좀더 깔금하게 사용하는 for 문.  (0) 2010.07.22
하나의 선택! switch, case.  (0) 2010.07.20
지속가능한 힘. while, do while  (0) 2010.07.19
이것 아니면 저것. if ~ else 문  (0) 2010.07.18
배열의 배열  (0) 2010.07.17
getter 와 setter.  (1) 2010.07.16
Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함