자바에서가장많이사용하는 String 클래스 필자가회사에서주로하는업무는시스템의장애를진단하고, 성능튜닝및측정을 하는것이다. 그런데, 그러한진단작업을하면서어떤객체가가장많이생성되는지 점검하는경우가있다. 그럴때보면 String 관련객체는몇백개의객체중에서상위 5 개안에는항상포함된

Size: px
Start display at page:

Download "자바에서가장많이사용하는 String 클래스 필자가회사에서주로하는업무는시스템의장애를진단하고, 성능튜닝및측정을 하는것이다. 그런데, 그러한진단작업을하면서어떤객체가가장많이생성되는지 점검하는경우가있다. 그럴때보면 String 관련객체는몇백개의객체중에서상위 5 개안에는항상포함된"

Transcription

1 정리해봅시다 문제에대한답은아래에서직접문제를푸시고확인할수있습니다. 1 API 문서를자동으로생성하는명령어를무엇이라고했나요? 2 API의왼쪽상단에는어떤내용이제공되나요? 2 장 String 3 API 의왼쪽하단에는어떤내용이제공되나요? 4 API 우측화면에는보통어떤내용이제공되나요? 5 Deprecated 라는것의의미는무엇인가요? 이장을시작하기전에 이장의제목은다른문장으로설명할필요가없어다른장과는다르게아주단순하게제목을정했다. 개발자분들이언제든지이장을쉽게찾아보고참조할수있도록하기위한것도또하나의이유다. 만약 char가뭔지모르거나 참조자료형에대해서이해가안되거나, 메소드가뭔지에대해서이해가안되거나, 앞장에서살펴본 API를어떻게사용하는지모르는분들은지금까지배운내용들을다시읽고이해한후이장을보셔야합니다. 혹시 String이어떤클래스인지, String의주요메소드들의이름만들어도사용법이머리에팍떠오르거나, StringBuffer와 StringBuilder 클래스와 String 클래스의차이 46 1 부 에대해서아주잘알고있다면이장을건너뛰어도됩니다.

2 자바에서가장많이사용하는 String 클래스 필자가회사에서주로하는업무는시스템의장애를진단하고, 성능튜닝및측정을 하는것이다. 그런데, 그러한진단작업을하면서어떤객체가가장많이생성되는지 점검하는경우가있다. 그럴때보면 String 관련객체는몇백개의객체중에서상위 5 개안에는항상포함된다. 그만큼여러분들이나중에시스템을개발할때 String 클 래스를많이사용하기때문에잘알고있어야만하는중요한클래스다. 그냥 String 은더하면되는거아니야? 라고생각할수도있지만, 자바에서 String 의비중은매우크다. 자바클래스들중에서 String 은 VVIP 정도로특별취급 을받는다. 클래스중에서더하기연산을제공하는클래스는 String 밖에없다. 그 냥객체더하면더해지던데무슨소리야? 라는분도있겠지만, 객체에더하기를하면 tostring() 메소드가호출되고그결과를더하는거다. 결론적으로 String 을더한다 는말이다. 그럼, 이귀한 String 클래스를집중해부해보자. 가장먼저 String 클래스가어떻게선언되어있는지살펴보자. public final class String extends Object implements Serializable, Comparable<String>, CharSequence public final 로선언되었다. public 이 누구나다사용할수있는클래스 라는정 도는다기억하고있을것이다. ( 이거기억못하고있으면정말안된다. - -;) 그다 음에 final 이라고선언되어있다. 클래스가 final 로선언되어있으면뭐가다른가? 2 분만생각해봅시다 앞 (Vol.1 의 12 장 인터페이스 ) 에서설명했지만, 클래스가 final 로선언되어있으 면더이상이클래스는확장할수없다. 다시말해서 String 클래스는자식클래스 를양산할수없다. 그냥있는대로사용해야만한다. 그리고, 첫줄의마지막을보면 Object 클래스를확장한것을볼수있다. 다시말하면, 모든클래스의부모클래스는 Object 클래스이므로이외에따로확장한클래스는없다는말이다. 둘째줄에있는 implements 문장은다음과같이되어있다. implements Serializable, Comparable<String>, CharSequence 클래스선언문에 implements 라고하면어떤의미가있는지한번다시생각해보자. 참고지금까지이책에서는필자가친절하게해당메소드가클래스내의어디에포함되어야하는지, 해당코드가어디에포함되어야하는지를쉽게찾아갈수있도록클래스선언부까지포함하여보여주었다. 하지만, 이제어느정도자바에친숙해졌으리라생각되니, 실습코드에클래스선언부까지보여주지는않을예정이다. 클래스선언문이조금길다. 하지만, 하나하나짚어가보면그리어려운내용은아니다. 가장첫줄을살펴보자. public final class String extends Object 2 분만생각해봅시다 implements 라고적어준뒤인터페이스들을나열하면해당인터페이스에선언 된메소드들을이클래스에서 구현 한다는의미다. 따라서, String 은 Serializable, Comparable, CharSequence 라는인터페이스를구현한클래스다. 여기서 Serializable 인터페이스는구현해야하는메소드가하나도없는아주특 이한인터페이스다. 이 Serializable 인터페이스를구현한다고선언해놓으면, 해당 객체를파일로저장하거나다른서버에전송가능한상태가된다. 이부분은지금설 명해도이해하기쉽지않을테니, 12 장의 Serializable 에서자세하게다시살펴 보자. 그리고, Comparable 이라는인터페이스도구현한다. 이인터페이스는 compareto() 라는메소드하나만선언되어있다. 이메소드는매개변수로넘어가는객체와현재 48 1 부 2 장. String 49

3 객체가같은지를비교하는데사용된다. 간단하게이름과내용만으로보기에는그냥 equals() 메소드와별차이가없다고생각할수도있다. 하지만, 이메소드의리턴타입은 int다. 같으면 0이지만, 순서상으로앞에있으면 -1, 뒤에있으면 1을리턴한다. 다시말해서객체의순서를처리할때유용하게사용될수있다. 이장의뒷부분에서 String() 생성자 설명비어있는 String 객체를생성한다. 그런데이렇게생성하는것은전혀의미가없다. 차라리다음과같이선언하는것이더효율적이다. String name=null; 이에대한내용은자세히살펴보자. 그리고, 선언문의꺽쇠 (<>) 안에 String 이라고적어주었는데, 이는제네릭 Generic 이라는것을의미한다. 이제네릭도설명하자면할말이많기때문에, 4장의 실수를방지하기위한제네릭이라는것도있어요. 를참고하기바란다. 가장마지막에있는 CharSequence 라는인터페이스가있다. 이인터페이스는해당클래스가문자열을다루기위한클래스라는것을명시적으로나타내는데사용된다. 이장의가장끝부분에서설명하는 StringBuilder 와 StringBuffer 클래스도이 CharSequence 인터페이스를구현해놓았다. 이에대한자세한설명은그부분에서살펴보자. 이제본격적으로 String 클래스에대한상세한내용을살펴보자. String(byte[] bytes) String(byte[] bytes, Charset charset) String(byte[] bytes, String charsetname) String(byte[] bytes, int offset, int length) String(byte[] bytes, int offset, int length, Charset charset) String(byte[] bytes, int offset, int length, String charsetname) 현재사용중인플랫폼의캐릭터셋을사용하여제공된 byte 배열을디코딩한 String 객체를생성한다. 지정된캐릭터셋을사용하여제공된 byte 배열을디코딩한 String 객체를생성한다. 지정한이름을갖는캐릭터셋을사용하여지정한 byte 배열을디코딩한 String 객체를생성한다. 현재사용중인플랫폼의기본캐릭터셋을사용하여지정한 byte 배열의일부를디코딩한 String 객체를생성한다. 지정된캐릭터셋을사용하여 byte 배열의일부를디코딩한 String 객체를생성한다. 지정한이름을갖는캐릭터셋을사용하여 byte 배열의일부를디코딩한 String 객체를생성한다. String 의생성자에는이런애들이있다 먼저생성자를살펴보자. 대부분문자열을만들때에는다음과같이간단하게만든다. String(char[] value) char 배열의내용들을붙여 String 객체를생성한다. String(char[] value, int offset, int count) char 배열의일부내용들을붙여 String 객체를생성한다. String(int[] codepoints, int offset, int count) 유니코드코드위치 (Unicode code point) 로구성되어있는배열의일부를새로운 String 객체를생성한다. String name="sangmin, Lee"; 대부분의경우이렇게선언하지만, String 의생성자는매우많다. 생성자의목록을보기전에몇가지용어에대해서간단히살펴보자. 캐릭터셋은문자의집합을의미하며, 이해가쉽게한마디로이야기하면, 한글, 일본어와같이특정나라의글자를 String(String original) String(StringBuffer buffer) String(StringBuilder builder) 매개변수로넘어온 String과동일한값을갖는 String 객체를생성한다. 다시말해서, 복제본을생성한다. 매개변수로넘어온 StringBuffer 클래스에정의되어있는문자열의값과동일한 String 객체를생성한다. 매개변수로넘어온 StringBuilder 클래스에정의되어있는문자열의값과동일한 String 객체를생성한다. 말한다. 자세한설명은잠시뒤에알아보자. 그리고, 디코딩은일반적으로암호화되 어있거나컴퓨터가이해할수있는값들을알아보기쉽게변환하는것을말한다. 그 러면이제 String 클래스의생성자를살펴보자. 여기에있는여러생성자들을다외울필요는없다. 각각의생성자를사용할필요 가있을때적당한생성자를찾아사용하면된다. 여기에있는생성자중에서그나마 많이사용하는생성자를추려보면다음과같다. String(byte[] bytes) String(byte[] bytes, String charsetname) 50 1 부 2 장. String 51

4 이생성자들은한글을사용하는우리나라에서는자주사용할수밖에없다. 왜냐하 참고로여기서 UCS 는유니코드캐릭터셋 Unicode Character Set 의약자다. 면, 대부분의언어에서는문자열을변환할때기본적으로영어로해석하려고하기때문이다. 왜이거밖에안쓰지? 라고생각할수도있지만, String 객체는대부분따옴표로묶어생성하기때문에굳이어려운생성자를사용할필요가없기때문이다. 캐릭터셋이름 US-ASCII ISO UTF-8 7 비트아스키 ISO 라틴알파벳 8 비트 UCS 변환포맷 설명 String 문자열을 byte 로변환하기 그런데, 생성자의매개변수로받는 byte 배열은어떻게생성할까? 이부분에대해서 UTF-16BE 16비트 UCS 변환포맷. big-endian 바이트순서를가진다. UTF-16LE 16비트 UCS 변환포맷. little-endian 바이트순서를가진다. UTF-16 16비트 UCS 변환포맷. 바이트의순서는 byte-order mark라는것에의해서정해진다. 는고민할필요가없다. String 클래스에는현재의문자열값을 byte 배열로변환하 는다음과같은 getbytes() 라는메소드들이있기때문이다. EUC-KR MS949 8 비트문자인코딩으로, EUC 의일종이며대표적인 한글완성형 인코딩 Microsoft 에서만든 한글확장완성형 인코딩 리턴타입메소드이름및매개변수설명 byte[] getbytes() 기본캐릭터셋의바이트배열을생성한다. 한글을처리하기위해서자바에서많이사용하는캐릭터셋은이중에서 UTF-16 이다. 예전에는 UTF-8 이나 EUC-KR 을많이사용했지만, 요즘에는대부분 UTF-16 byte[] byte[] getbytes(charset charset) getbytes(string charsetname) 지정한캐릭터셋객체타입으로바이트배열을생성한다. 지정한이름의캐릭터셋을갖는바이트배열을생성한다. 을많이사용한다. 이제예제를통해서 String 클래스의생성자를살펴보자. StringSample 이라는클 래스를 d.string 이라는패키지에만들고, main() 메소드도만들자. 생성자들을확인 보통캐릭터셋을잘알고있거나, 같은프로그램내에서문자열을 byte 배열로만들때에는가장위에있는 getbytes() 메소드를사용하면된다. 하지만, 다른시스템에서전달받은문자열을 byte 배열로변환할때에는두번째나세번째에있는메소드를사용하는것이좋다. 왜냐하면다른캐릭터셋으로되어있을수도있기때문이다. 잠시 캐릭터셋 에대해서좀자세히살펴보자. 자바만이아니라, 어떤프로그래밍언어를사용할경우에도특수문자를표시할일이생긴다. 여기서특수문자는특별한문자라기보다는알파벳을제외한나라의문자를의미한다고보는것이가장쉽게이해가될것이다. 그렇다면한글은? 한글도기본적으로는알파벳이아니기때문에고유의캐릭터셋을가진다. 가끔웹페이지를서핑하다보면한글이깨지는경우를보았을것이다. 이렇게한글이깨지는이유는브라우저에서생각하는캐릭터셋과웹페이지에지정된캐릭터셋이다르기때문이다. java.nio 패키지의 Charset 클래스 API에는표준캐릭터셋이정해져있다. 목록을한번살펴보자. 해볼 constructors() 라는메소드를다음과같이만들어놓자. package d.string; public class StringSample { public static void main(string[] args) { StringSample sample=new StringSample(); sample.constructors(); public void constructors() { try { // 예제코드가위치할부분 catch (Exception e) { e.printstacktrace(); 52 1 부 2 장. String 53

5 그러면이제예제를작성할준비는끝났다. 이제중간에있는 // 예제코드가위치 할부분 에지금부터살펴보는코드를추가하자. String str=" 한글 "; byte[] array1=str.getbytes(); ➋ for(byte data:array1) { ➌ System.out.print(data + " "); System.out.println(); String str1=new String(array1); ➍ System.out.println(str1); ➊ package d.string; public class StringSample { // 중간생략 public void printbytearray(byte[] array) { for(byte data:array) { System.out.print(data + " "); System.out.println(); 이렇게메소드내에자주사용되는부분을별도의메소드로빼놓는버릇을들이 처음보면복잡해보이지만, 하나하나살펴보면그리어렵지않다. ➊ 한글 이라는값을갖는 String 객체인 str를생성했다. ➋ 방금알아본 getbytes() 라는메소드를사용하여 str를 byte 배열로만들었다. ➌ 만들어진 byte 배열에어떤값들이있는지살펴보기위해서 for 루프를사용하여각각의 byte 값을출력하도록해놓았다. ➍ byte 배열을갖고 String 객체를만들기위해서 byte 배열 (array1) 을매개변수로갖는 String 객체를생성하고, 그문자열을출력했다. 이렇게코드를작성하고 StringSample 클래스를컴파일및실행하자. 결과는다음과같다 한글 는것이향후에재사용성을위해서좋다. 이 printbytearray() 메소드를활용하도록 constructors() 메소드를변경하면 다음과같다. String a=" 한글 "; byte[] array1=str.getbytes(); printbytearray(array1); String str1=new String(array1); System.out.println(str1); 메소드가보다읽기쉬워졌다는것을알수있다. 이번에는 EUC-KR 이라는캐 릭터셋으로변환해보자. constructors() 메소드의가장아랫줄에다음의 4 줄을추 가하자. 원래만들어놓았던 한글 이라는값이그대로출력된것을볼수있다. 왜냐하면 getbytes() 메소드는플랫폼의기본캐릭터셋으로변환을하고, String(byte[]) 생 성자도플랫폼의기본캐릭터셋으로변환을하기때문에전혀문제가발생하지는않 byte[] array2=str.getbytes(); printbytearray(array2); String str2=new String(array2,"EUC-KR"); System.out.println(str2); 았다. 여기서중간에있는 byte 배열의값을출력하는부분이아무리생각해도자주사 이렇게해놓고실행하면어떤결과가나올까? 용될것같으니다음과같이별도의메소드로만들어놓자. 1 분만생각해봅시다 54 1 부 2 장. String 55

6 결과는다음과같다. 개변수를캐릭터셋이름으로지정하는메소드를사용하면된다. 다음의내용을 constructors() 메소드의 try 블록의가장마지막에추가하자 한글 한글 byte[] array3=str.getbytes("utf-16"); printbytearray(array3); String str3=new String(array3,"UTF-16"); System.out.println(str3); 앞서알아본예제와차이가없이결과가동일하게출력된것을볼수있다. 다시 말해서지금필자가사용하는자바플랫폼의기본캐릭터셋은 EUC-KR 이라는것 이렇게추가한후실행해보자. 결과가제대로나올까? 을알수있다. str2 객체를생성할때캐릭터셋을 EUC-KR 이아닌 UTF-8 로사용 하면어떻게될까? 다시말해서다음과같이변경했을때를말하는것이다. 1 분만생각해봅시다 byte[] array2=str.getbytes(); printbytearray(array2); String str2=new String(array2,"UTF-8"); System.out.println(str2); 이렇게변경한후실행결과는다음과같이나온다 한글 ??? 가장아래에있는결과가물음표 (???) 로나오는것을볼수있다. 즉, 잘못된캐릭 터셋으로변환을하면여러분들이알아볼수없는문자로표시된다. 예전에여러분 들의선배들이자바를처음배울때이와같이캐릭터셋을변환하는부분에서고생 을많이했었다. 지금은참고할만한정보들이많아서이러한고생을많이하지않는 다. 일단방금 UTF-8 로변경한부분을결과가제대로출력되도록다시 EUC-KR 로 바꾸어놓자. 그렇다면, byte 배열로변환할때캐릭터셋을변경해버릴수없을까? 그럴필 요가있을때에는 String 클래스에 getbytes() 라는이름을갖는메소드중에서매 결과는다음과같다 한글 한글 한글 정상적으로결과가나온것을볼수있다. 하지만, 한가지다른것이있다. EUC- KR 의경우는한글두글자를표현하기위해서 4 바이트를사용하지만, UTF-16 은 6 바이트를사용한다는점이다. 여러분들이 str 의값을변경해보면서확인해보면글자 수와상관없이무조건 2 바이트의차이가발생한다는것을알수있을것이다. 직접해봅시다 문자열 str을 한글 이아닌 최고의자바기본서 라고변경하여직접실행해보기바란다. 자바에서한글이몇바이트를점유하는지알아두는것은우리나라에서개발하면 매우중요하다. 이번절에서는 String 클래스의생성자와 getbytes() 메소드에대해서살펴보 았다. 모든생성자를다외우고있을필요는없지만, 많이사용되는몇몇생성자와 getbytes() 메소드는자바개발을목적으로이책을보는분들은꼭기억하고있어 56 1 부 2 장. String 57

7 야만한다. 이번절에서만든 constructors() 메소드의전체소스를보면서배운내 용을다시한번확인해보기바란다. public void constructors() { try { String str=" 한글 "; byte[] array1=str.getbytes(); printbytearray(array1); String str1=new String(array1); System.out.println(str1); byte[] array2=str.getbytes(); printbytearray(array2); String str2=new String(array2,"EUC-KR"); System.out.println(str2); byte[] array3=str.getbytes("utf-16"); printbytearray(array3); String str3=new String(array3,"UTF-16"); System.out.println(str3); catch (Exception e) { e.printstacktrace(); 그런데, 왜필자가이메소드의내용들을 try-catch 블록으로감싸놓았을까? 그 이유는캐릭터셋을지정하는메소드및생성자들때문이다. byte 배열과 String 타 입의캐릭터셋을받는생성자, getbytes() 메소드중에서 String 타입의캐릭터셋 을받는메소드는 UnsupportedEncodingException 을발생시킬수있다. 존재하지 않는캐릭터셋의이름을지정할경우에는이예외가발생하게되므로, 반드시 trycatch 로감싸주거나 constructors() 메소드선언시 throws 구문을추가해주어야 만한다 ( 이말이무슨뜻인지이해가안되는분들은 Vol.1 의 14 장 다배운거같지 만, 예외라는중요한게있어요 를다시한번읽어서예외에대해서꼭이해하고넘어 가주기바란다 ). 객체의널체크는반드시필요하답니다 여러분들이 String 의메소드를사용하기전에짚고넘어가야하는것이있다. 바로널 체크다. 널은 null 로표시하며, 어떤참조자료형도널이될수있다. 객체가널이라는 말은객체가아무런초기화가되어있지않으며, 클래스에선언되어있는어떤메소 드도사용할수없다는의미다. 다시말해서, 여러분들이널체크를하지않으면객체 에사용할수있는메소드들은모두예외를발생시킨다. 어떤객체가널이면아무런일을못한다. 누군가가너무배가고픈데, 카드도없고 현금도없는상태에서식당에들어가서밥을먹는다고생각해보자. 밥을다먹고나 서그냥식당을나온다면그사람은무전취식으로경찰서에가게된다. 물론주인이 베푸는것을아주좋아하는분이라면그냥보내줄수도있다. 하지만, 자바는그렇게 착한주인이아니다. 여러분들이널인객체의메소드를호출하는순간예외를발생 시킨다. 다시말해서돈이없으면주문도할수없는선불식당이라고생각하면된다. 일단예제를살펴보자. 다음과같이 StringSample 클래스에 nullcheck() 라는메소드를만들자. public boolean nullcheck(string text) { int textlength=text.length(); System.out.println(textLength); if(text==null) return true; else return false; 여기서메소드의처음두줄은 null 인객체를참조할때어떤일이발생하는지를 확인하기위한용도로작성된것이다. 이렇게 nullcheck() 메소드를만들어놓고, main() 메소드에서이메소드만호출하도록다음과같이변경하자. public static void main(string[] args) { StringSample sample=new StringSample(); //sample.constructors(); System.out.println(sample.nullCheck(null)); 58 1 부 2 장. String 59

8 null 도자바예약어이기때문에어떤객체의이름이나메소드이름등으로사용할 수없다. 이소스의컴파일은정상적으로된다. 코드를실행해보자. 결과는어떻게나올까? 1 분만생각해봅시다 객체가널인지아닌지는실행시에만확인할수있기때문이다. 이메소드가수행 된결과는다음과같이나온다. Exception in thread "main" java.lang.nullpointerexception at d.string.stringsample.nullcheck(stringsample.java:43) at d.string.stringsample.main(stringsample.java:7) 다시말해서, null 인객체의메소드에접근하면 NullPointerException 이발생한 다. 이제다음과같이객체를참조하는메소드들을주석처리하자. public boolean nullcheck(string text) { //int textlength=text.length(); //System.out.println(textLength); if(text==null) return true; else return false; 이렇게수정한후컴파일및실행을하면 true 가출력된다. 게다가, 예상치못한 NullPointerException 도발생하지않는다. 객체가널인지아닌지체크하는것은이 와같이!= 이나 == 연산자를사용하면쉽게확인할수있다. 여러분들이 null 체크하는것을우습게봐서는안된다. 널체크를하지않아서애 String 의내용을비교하고검색하는메소드들도있어요 String 클래스는문자열을나타낸다. 따라서, 문자열내에특정위치를찾거나, 값을 비교하는등의작업은아주빈번히발생된다. String 클래스에서제공하는메소드에 는어떤것들이있고, 어떤작업을수행하는지를알아두면여러분들의코드도그만큼 깔끔해지고, 개발도빨라진다. 그여러가지메소드중에서이번절에서는 String 클 래스객체의내용을비교하고검색하는메소드들을알아보자. 이메소드들을조금더 세밀하게분류하면다음과같다. 문자열의길이를확인하는메소드 문자열이비어있는지확인하는메소드 문자열이같은지비교하는메소드 특정조건에맞는문자열이있는지를확인하는메소드 여러분들이이렇게구분해놓은것만보면 메소드이름이뭘까? 하고고민하는 습관을들여야한다. 왜냐하면, 이책으로자바공부를마치면여러분들은앞으로자 바를통하여수많은메소드들을만들것이고, 그메소드들의이름도지정해야하기 때문이다. 메소드이름이나변수이름을애매모호하게지정하면나중에논란의소지 가될수도있으므로, 메소드이름도직관적으로짓는습관을들여야만한다. 먼저비교하는데사용되는메소드들을수행할 comparecheck() 메소드를 StringSample 클래스에다음과같이만들어놓고, main() 메소드에서이메소드만 수행하도록해놓자. public void comparecheck() { 플리케이션이비정상으로작동하여장애로이어질수도있기때문이다. 아무리강조 해도지나치지않는것이바로 null 체크이므로, 메소드의매개변수로넘어오는객체가널이될확률이조금이라도있다면반드시한번씩확인하는습관을갖고있어야만한다. 그럼이제본격적으로 String 클래스에어떤메소드들이있는지살펴보자. 문자열의길이를확인하는메소드 리턴타입메소드이름및매개변수설명 int length() 문자열의길이를리턴한다 부 2 장. String 61

9 문자열의길이를확인할때에는 length() 메소드를사용하면된다. 배열도객체이긴하지만메소드는없는특수한객체다. 그래서배열의크기를확인할때에는괄호가없는 length 를사용한다. 하지만, 그이외의모든클래스는메소드를호출해야하며, String 객체의길이를확인하기위해서는 length() 라는메소드를사용해야만한다. 다음의사용예를보자. System.out.println("text.isEmpty()="+text.isEmpty()); 이한줄을추가한후결과는어떻게나올지생각해보자. 30 초만생각해봅시다 public void comparecheck() { String text="you must know String class."; System.out.println("text.length()="+text.length()); 이와같이간단하게사용하면된다. 이메소드가수행된결과는어떻게나올까? 1 분만생각해봅시다 결과는 text 객체의 char 개수를세어보면된다. 출력되는내용은다음과같다. text.length()=27 text 라는객체는 27 개의 char 로구성되어있으므로비어있지않다. 따라서결과 는 false 를리턴한다. text.length()=27 text.isempty()=false 만약 text 가공백하나로되어있는문자열이라도, 이메소드는 false 를리턴한다. 우리눈으로보기에공백이나빈칸이나출력하면같은것처럼느끼지만프로그램에 서는다르게인식한다. 문자열이같은지비교하는메소드 String 클래스에서제공하는문자열이같은지비교하는메소드들은매우많다. 당연한이야기지만, 공백도길이에포함된다. 만약한글일경우에는어떻게결과가나올지궁금한독자도있을것이다. 한글의길이는직접 text 값을변경해서확인해보자. 문자열이비어있는지확인하는메소드리턴타입메소드이름및매개변수설명 리턴타입 boolean boolean int int boolean boolean 메소드이름및매개변수 equals(object anobject) equalsignorecase(string anotherstr) compareto(string anotherstr) comparetoignorecase(string str) contentequals(charsequence cs) contentequals(stringbuffer sb) boolean isempty() 문자열이비어있는지를확인한다. 비어있으면 true를리턴한다. 메소드들의이름으로분류하면 equals 로시작하는메소드, compareto 로시작하 문자열의길이가 0 인지아닌지를확인하는것보다, 이메소드를사용하는것이훨 씬간단하다. 다음의한줄을 comparecheck() 메소드의가장아랫줄에넣고실행해 보자. 는메소드, contentequals 메소드로세가지메소드로분류할수있다. 이름들은서 로상이하지만, 이모든메소드들은매개변수로넘어온값과 String 객체가같은지 를비교하기위한메소드다. 단지, IgnoreCase 가붙은메소드들은대소문자구분을 62 1 부 2 장. String 63

10 할지안할지여부만다르다. Ignore 는 무시한다 는의미이며, Case 는 대소문자 를 말한다. 이중에서가장먼저 equals() 메소드에대해서살펴보자. equals() 메소드에대 한설명은이미 Object 클래스를설명할때자세히알아봤으므로다기억하고있으 리라믿는다. 다음예제처럼 equalcheck() 이라는메소드를만들자. public void equalcheck() { String text="check value"; String text2="check value"; if(text==text2) { System.out.println("text==text2 result is same."); else { System.out.println("text==text2 result is different."); if(text.equals("check value")) { System.out.println("text.equals(text2) result is same."); 이렇게 equalscheck() 메소드를만들어놓고, main() 메소드에서이메소드만호출 String 클래스도기본적으로 equals() 메소드를사용해서비교를해야만한다. 하지만이렇게결과가나오는이유는자바에 Constant Pool 이라는것이존재하기 때문이다. 이에대한자세한설명은이책에서안하겠지만, 간단하게이야기하면, 자 바에서는객체들을재사용하기위해서 Constant Pool 이라는것이만들어져있고, String 의경우동일한값을갖는객체가있으면, 이미만든객체를재사용한다. 따라 서, text 와 text2 객체는실제로는같은객체다. 이첫번째연산결과가우리가원하는대로나오도록하려면, text2 객체의생성 을다음과같이변경하면된다. String text2=new String("Check value"); 이렇게 String 객체를생성하면값이같은 String 객체를생성한다고하더라도 Constant Pool 의값을재활용하지않고별도의객체를생성한다. 따라서이와같이 변경후에이메소드를수행해보면결과가다음과같이출력된것을확인할수있다. text==text2 result is different. text.equals(text2) result is same. 하도록한뒤에컴파일후실행해보자. 어떤결과가나올까? 먼저결과를보자. 1 분만생각해봅시다 이번에는 String 클래스에선언되어있는 equalsignorecase() 메소드의사용법 을확인해보자. 다음과같이 equalscheck() 메소드의가장마지막줄하단에 4 줄을 추가하자. text==text2 result is same. text.equals(text2) result is same. 어? 일반적으로생각하기에는두번째 if 문만통과해서결과가출력될것같은데 아니네 라고생각할수도있다. 왜냐하면, 필자가말한내용을기억하는독자는자 바에서객체는 equals() 메소드로비교를해야한다고한것을기억할것이기때문 이다. String text3="check value"; if(text.equalsignorecase(text3)) { System.out.println("text.equalsIgnoreCase(text3) result is same."); text 와 text3 는첫글자가대문자로시작하는지, 소문자로시작하는지의차이만 존재한다. 이렇게대소문자만다른문자열을 equalsignorecase() 메소드를이용하 여비교한결과는다음과같다 부 2 장. String 65

11 text==text2 result is different. text.equals(text2) result is same. text.equalsignorecase(text3) result is same. 예상한대로대소문자를구분하지않고두개의값이같은지다른지만확인하는것 을볼수있다. String 클래스의 compareto() 메소드는 Comparable 인터페이스에선언되 어있다고이장의앞부분에서설명했다. 다음과같이 StringSample 클래스에 comparetocheck() 메소드를추가하자. public void comparetocheck() { String text="a"; String text2="b"; String text3="c"; System.out.println(text2.compareTo(text)); System.out.println(text2.compareTo(text3)); System.out.println(text.compareTo(text3)); 이렇게만들어놓고, 각결과가어떻게출력될지생각해보자. b 가 a 보다뒤에있으므로, 첫번째결과는양수를리턴한다. 나머지 b 와 c, a 와 c 를비교한결과는각각음수를리턴한것을볼수있다. 이러한결과값은반드시외울필요는없지만, 여러분들이여러가지각종값들을비교해서어떤결과가나오는지는확인해둘필요가있다. comparetoignorecase() 메소드는 equalsignorecase() 메소드와마찬가지로, 대소문자구분을하지않고 compareto() 메소드를수행하는것과같다. String 클래스의문자열비교하는메소드중마지막으로 contentequals() 메소드는매개변수로넘어오는 CharSequence 와 StringBuffer 객체가 String 객체와같은지를비교하는데사용된다. 관련된사용은할말이많으므로, 이장의마지막절에서별도로확인해보자. 특정조건에맞는문자열이있는지를확인하는메소드리턴타입메소드이름및매개변수 boolean startswith(string prefix) boolean startswith(string prefix, int toffset) boolean endswith(string suffix) boolean contains(charsequence s) boolean matches(string regex) 3 분만생각해봅시다 compareto() 메소드는보통정렬 sorting 을할때사용한다. 따라서, true, false 의 boolean boolean regionmatches(boolean ignorecase, int toffset, String other, int ooffset, int len) regionmatches(int toffset, String other, int ooffset, int len) 결과가아니라, 비교하려는매개변수로넘겨준 String 객체가알파벳순으로앞에있 으면양수를, 뒤에있으면음수를리턴한다. 그리고, 알파벳순서만큼그숫자값은커 진다. 결과를확인해보자 이중에서가장많이사용하는것이 startswith() 메소드다. startswith() 메소드는이름그대로매개변수로넘겨준값으로시작하는지를확인한다. 예를들어 서울시구로구신도림동, 경기도성남시분당구정자동 과같이주소를나타내는문자열들이있을때 서울시 의주소를갖는모든문자열을쉽게찾을수있다. 다음절에있는 indexof() 라는메소드를사용하여확인하는것도가능하지만, 이메소드의단점은문자열의모든내용을다확인해봐야한다는단점이있다. 마찬가지로 endswith() 메소드는매개변수로넘어온값으로해당문자열이끝나는지를확인하 는메소드다 부 2 장. String 67

12 startswith() 와 endswith 메소드를사용하여점검대상의문자열에확인하고자 하는문자열로시작하는개수와끝나는개수를세어보는예제를살펴보자. 다음과 같이 StringSample 클래스에 addresscheck() 라는메소드를만들자. public void addresscheck() { String addresses[]=new String[]{ " 서울시구로구신도림동 ", " 경기도성남시분당구정자동개발공장 ", " 서울시구로구개봉동 ", ; int startcount=0,endcount=0; String starttext=" 서울시 "; String endtext=" 동 "; for(string address:addresses) { if(address.startswith(starttext)) { startcount++; if(address.endswith(endtext)) { endcount++; System.out.println("Starts with "+starttext+ " count is "+startcount); System.out.println("Ends with "+endtext+" count is "+endcount); addresses 라는 String 객체에는 3 개의주소가있다. 이예제는 서울시 로시작 하는주소와 동 으로끝나는주소의개수를확인하여그결과를출력한다. main() 메소드에서이메소드만수행하도록변경한후컴파일및실행을해보자. 과연결과는어떻게나올까? 2 분만생각해봅시다 서울시 로시작하는문자열은두개가있으며, 모든주소는동으로끝난다. 따라 서, 결과는다음과같이출력된다. Starts with 서울시 count is 2 Ends with 동 count is 3 이렇게 startswith() 메소드와 endswith() 메소드를사용하면여러분들이원하 는값이해당문자열에있는지쉽게확인할수있다. 그러면, 중간에있는값은어떻게확인가능할까? 그래서존재하는것이 contains() 메소드다. 이메소드는매개변수로넘어온값이문자열에존재하는지를 확인한다. 그다음에있는 matches() 메소드는 contains() 메소드와비슷하긴하지 만, 매개변수로넘어오는값이 정규표현식 Regular Expression 으로되어있어야만한 다. 정규표현식이라는것은여러분들이이메일을점검하거나, 웹페이지의 URL 을 점검하는등의작업을쉽게하기위해서공식에따라만든식을말한다. 자바에서는 JDK 1.4 부터정규표현식을제공하며, java.util.regex 패키지의 Pattern 클래스 API 에있는내용을잘읽어보면많은정보를확인할수있다. 정규표현식에대해서는책 한권으로정리해도부족할정도이며, 인사이트의 < 손에잡히는정규표현식 > 이라는 책을참고하기바란다. 그러면 String 클래스의 contains() 메소드가어떻게사용되는지, 방금사용한 addresscheck() 메소드를수정하여확인해보자. public void addresscheck() { String addresses[]=new String[]{ " 서울시구로구신도림동 ", " 경기도성남시분당구정자동 ", " 서울시구로구개봉동 ", ; int startcount=0,endcount=0; int containcount=0; String starttext=" 서울시 "; String endtext=" 동 "; String containtext=" 구로 "; for(string address:addresses) { if(address.startswith(starttext)) { startcount++; if(address.endswith(endtext)) { endcount++; 68 1 부 2 장. String 69

13 if(address.contains(containtext)) { containcount++; Sys tem.out.println("starts with "+starttext+" count is "+startcount); System.out.println("Ends with "+endtext+" count is "+endcount); Sys tem.out.println("contains "+containtext+" count is "+containcount); 매개변수목록을보면알겠지만, 하나는대소문자를구분할지여부를지정할수없고, 다른하나는그런지정자체가불가능하다. 이 regionmatches() 메소드의매개변수로넘어오는값이많으니, 매개변수가 5개인메소드를기준으로각각이어떤값을뜻하는지확인해보자. 매개변수의미 ignorecase true일경우대소문자구분을하지않고, 값을비교한다. toffset 비교대상문자열의확인시작위치를지정한다. 굵은글씨로되어있는부분이추가된내용이다. 결과가어떻게나올까? other 존재하는지를확인할문자열을의미한다. ooffset other 객체의확인시작위치를지정한다. 1 분만생각해봅시다 len 비교할 char 의개수를지정한다. 여러분들이예상하는대로 구로 를포함한문자열의개수는두개이다. 따라서, 결 과도다음과같이나온다. 처음보는분들은무슨말인지예제가없으면이해하기어려울것이다. 다음의예 제를통해서확인해보자. Starts with 서울시 count is 2 Ends with 동 count is 3 Contains 구로 count is 2 이예제를보면, 아니뭐그냥눈으로살펴보면되겠구만. 뭐이런걸힘들게메소 드로만들까? 라는생각을할수도있다. 지금의예제에서는달랑 3 개의문자열이지 만, 몇천, 몇만개의데이터를확인해야하는경우도발생한다. 그럴때사용하기위 한것이다. regionmatches() 라는메소드는문자열중에서특정영역이매개변수로넘어온 문자열과동일한지를확인하는데사용된다. 이메소드의종류를다시보자. public void matchcheck() { String text="this is a text"; String compare1="is"; String compare2="this"; System.out.println(text.regionMatches(2, compare1, 0, 1)); // 매개변수가 4 개인메소드 System.out.println(text.regionMatches(5, compare1, 0, 2)); // 매개변수가 4 개인메소드 System.out.println(text.regionMatches(true,0, compare2, 0, 4)); // 매개변수가 5 개인메소드 예제코드를살펴보면 text 값이있고, 비교할 compare1 과 compare2 가있다. boolean boolean 리턴타입 메소드이름및매개변수 regionmatches(boolean ignorecase, int toffset, String other, int ooffset, int len) regionmatches(int toffset, String other, int ooffset, int len) 이메소드의수행결과가제대로나올지를확인하려면, 각 char의위치가어디에해 당하는지를알아야만한다. T h i s i s a t e x t 부 2 장. String 71

14 자바에서 String 의 char 위치는배열과마찬가지로 1부터시작하는것이아니라, 0부터시작한다. text 문장에 is 라는문자열이시작되는위치를잘확인해보자. 처음 is가나오는것은 2번째위치와 5번째위치다. text.regionmatches(2, compare1, 0, 1); 첫번째 regionmatches() 메소드를자세히살펴보자. 첫번째매개변수인 2라는위치값은제대로맞았다. 비교하려고하는 compare1 의값이 is 다. 그런데, 세번째매개변수가 0이고, 네번째매개변수가 1이기때문에비교하려는것은 i 인지아닌지만확인하면된다. 따라서첫번째출력문의결과는 true이다. 동일한방법으로두번째, 세번째출력문의결과를예상해보자. toffset 이음수일때 ooffset 이음수일때 toffset+len 이비교대상의길이보다클때 ooffset+len 이 other 객체의길이보다클때 ignorecase 가 false 인경우에는비교범위의문자들중같은위치 (index) 에 있는 char 가다를때, ignorecase 가 true인경우에는비교범위의문자들을모두소문자로변경한 후같은위치 (index) 에있는 char 가달라야한다. 이번절에서는 String 문자열의내용을비교하고검색하는메소드들을알아보았 다. 여기에있는메소드들을꼭외울필요는없다. 여러분들이개발하다보면자연스 레외어질것이다. 하지만, 어떤기능의메소드가있는지정도는기억해두고다음절 로넘어가자. 2 분만생각해봅시다 모든조건이다맞는다. 따라서 main() 메소드에서이메소드만수행하도록해놓 은후실행한결과는다음과같다. true true true 그런데 regionmatches() 메소드를잘못사용하면, 원하는결과를얻지못할수도 있다. 이메소드의선언을다시보자. reg ionmatches(boolean ignorecase, int toffset, String other, int ooffset, int len) String 내에서위치를찾아내는방법은여러가지에요 다음과같은문장이있다. Java technology is both a programming language and a platform. 이문장에서 both 라는단어가시작하는위치를알고싶을때어떻게해야할까? 자바의 String 클래스에서는 indexof 라는단어가포함되어있는메소드를제공한다. 이메소드를사용하면해당객체의특정문자열이나 char가있는위치를알수있다. 만약여러분들이찾고자하는문자열이나 char가없으면이메소드는 -1을리턴한다. 그럼위치를찾는메소드에는어떤것들이있는지살펴보자. 온다. 여러매개변수중에서값이다음과같은경우에는결과가 무조건 false 로나 72 1 부 2 장. String 73

15 리턴타입 indexof(int ch) indexof(int ch, int fromindex) 메소드이름및매개변수 첫번째 indexof() 부터살펴보자. ➊ 필자가말한대로, a 의형태로매개변수를넘겨주어도컴파일및실행하는데전 혀문제가발생하지않는다. indexof(string str) indexof(string str, int fromindex) int lastindexof(int ch) lastindexof(int ch, int fromindex) lastindexof(string str) lastindexof(string str, int fromindex) indexof() 메소드는 String 클래스의가장많이사용되는메소드중하나다. 그만큼중요하고많이사용되기때문에꼭사용법을알고있어야만한다. 메소드들을살펴보면, 종류는크게 indexof() 와 lastindexof() 의두가지로나뉜다. indexof() 는 ➋ String 타입의매개변수를넘겨주었으며, a 뒤에는공백이하나있다. ➌ 세번째와네번째출력문은모두 text 문자열의 20번째자리부터값을확인한다. ➍ 마지막에있는출력문은이문장에없는 z 를찾은결과를출력한다. 혹시나해서다시한번말하지만, 자바에서의 index 는 0부터시작한다. 따라서 Java의 J 앞은 0, J와 a 사이는 1이다. 종이로위치를확인할때에는그사이를펜으로꾹꾹눌러서확인해보면편하고, PC에서확인할때에는커서를맨앞으로옮겨놓고우측방향키를한번씩누르면서위치를확인게제일편하다. 그러면, 이메소드의출력결과는어떻게나올까? 앞에서부터 ( 가장왼쪽부터 ) 문자열이나 char를찾으며, lastindexof() 는뒤에서부터 ( 가장오른쪽부터 ) 찾는다. 그런데, String 을매개변수로갖는메소드는이해가되는데, int를매개변수로갖는메소드는어떻게사용해야할까? char는정수형이다. 따라서, 여러분들이이메소드의매개변수로 char를넘겨주면자동으로형변환이일어나기때문에걱정하지않아도된다. 먼저 indexof() 메소드의예를통해서알아보자. StringSample 클래스에 indexofcheck() 를다음과같이추가하고, main() 메소드에서이메소드만호출하도록변경하자. 결과는다음과같다 분만생각해봅시다 public void indexofcheck() { String text= "Java technology is both a programming language and a platform."; System.out.println(text.indexOf('a')); ➊ System.out.println(text.indexOf("a ")); ➋ System.out.println(text.indexOf('a',20)); ➌ System.out.println(text.indexOf("a ",20)); System.out.println(text.indexOf('z')); ➍ Java의 a 중첫번째 a가가장앞에있는 a이므로첫출력문의결과는 1이다. 두번째출력문은 a 다음에공백이있는위치를찾는것이므로, Java 단어뒤에공백이있으므로 3이다. 그리고, 세번째와네번째의결과는 20번째자리부터찾는작업을하고, 제일처음나온관사 a의위치가 24번째이므로결과가동일하다. 마지막 indexof() 의경우 z가문장에없으므로 -1을출력하였다. 이번에는문자열의가장뒤부터 ( 오른쪽부터 ) 검색을하는 lastindexof() 메소드의예제를살펴보자 부 2 장. String 75

16 public void lastindexofcheck() { Str ing text= "Java technology is both a programming language and a platform."; System.out.println(text.lastIndexOf('a')); System.out.println(text.lastIndexOf("a ")); System.out.println(text.lastIndexOf('a',20)); System.out.println(text.lastIndexOf("a ",20)); System.out.println(text.lastIndexOf('z')); 방금살펴본 indexofcheck() 메소드예제와다른것은메소드이름과각출력문 에있는 indexof 가모두 lastindexof 로바뀐것밖에없다. main() 메소드에서이메 소드만수행하도록한후, 이예제를실행하자. 결과는어떻게나올까? 참고로, 이 text 문자열의길이는 62 다. 따라서, 가장우측에 있는점 (.) 의오른쪽위치가 62 다. String 의값의일부를추출하기위한메소드들은얘네들이다 문자열의위치를찾는이유는여러가지다. 보통그위치부터어떤값을추출해내거 나, 그값이존재하는지를확인할때사용한다. 그중에서특정값을추출할때사용 하는메소드들을이절에서알아보자. 값을추출하는메소드의종류는다음과같이 구분할수있다. char 단위의값을추출하는메소드 char 배열의값을 String 으로변환하는메소드 String 의값을 char 배열로변환하는메소드 문자열의일부값을잘라내는메소드 문자열을여러개의 String 배열로나누는메소드 먼저특정위치의 char 값을추출하는메소드를알아보자. 3 분만생각해봅시다 indexof() 메소드와 lastindexof() 메소드가다른점은검색위치만다른것이기 때문에, 별도의설명은하지않아도이해하리라생각된다. 결과를보자 예상한대로 platform 의 a 의위치, 관사 a 의마지막위치, Java 의뒤에있는 a 위 치등을출력한것을볼수있다. 그리고, z 는이문장에포함되어있지않으므로, -1 char 단위의값을추출하는메소드 리턴타입 메소드이름및매개변수 설명 char charat(int index) 특정위치의 char 값을리턴한다. void getchars(int srcbegin, int srcend, char[] dst, int dstbegin) 매개변수로넘어온 dst라는 char 배열내에 srcbegin에서 srcend에있는 char를저장한다. 이때, dst 배열의시작위치는 dstbegin 이다. int codepointat(int index) 특정위치의유니코드값을리턴한다. 리턴타입은 int지만, 이값을 char로형변환하면 char 값을출력할수있다. int codepointbefore(int index) 특정위치앞에있는 char의유니코드값을리턴한다. 리턴타입은 int지만, 이값을 char로형변환하면 char 값을출력할수있다. int codepointcount(int beginindex, int endindex) 지정한범위에있는유니코드개수를리턴한다. 을출력했다. 그런데, lastindexof() 메소드의검색시작위치 (fromindex) 는어떤 값을말하는것일까? 여기서시작위치는가장왼쪽에서부터의위치를말한다. 그위 int offsetbycodepoints(int index, int codepointoffset) 지정된 index부터오프셋 (offset) 이설정된인덱스를리턴한다. 치부터왼쪽으로값을찾는다. 마지막에있는 offsetbycodepoints() 메소드는문자열인코딩과관련된문제를 해결하기위해서사용되며, 아래사이트를참고하면많은도움이될것이다 부 2 장. String 77

17 문자열의일부값을잘라내는메소드 그런데, 여기에있는메소드들은그리많이사용되지는않는다. 그나마많이사용 리턴타입메소드이름및매개변수설명 하는메소드가 charat() 메소드다. 앞절에서살펴본예제에서 charat() 메소드를사용하여, indexof() 로탐색한위치에있는값을확인하는작업을한번직접해보자. 혹시나해서이야기하지만, 한글의경우는한글자로인식된다. String String substring(int beginindex) substring(int beginindex, int endindex) beginindex부터끝까지대상문자열을잘라 String으로리턴한다. beginindex부터 endindex까지대상문자열을잘라 String으로리턴한다. char 배열의값을 String 으로변환하는메소드 CharSequence subsequence(int beginindex, int endindex) beginindex부터 endindex까지대상문자열을잘라 CharSequence 타입으로리턴한다. 리턴타입 메소드이름및매개변수 설명 static String copyvalueof(char[] data) char 배열에있는값을문자열로변환한다. static String char 배열에있는값을문자열로변환한다. 단 copyvalueof(char[] data, offset 위치부터 count까지의개수만큼만문자 int offset, int count) 열로변환한다. copyvalueof() 라는메소드도그리많이사용하지는않는다. 그래도이러한메소드 가있는지알고있는것은많은도움이된다. 단, 이메소드는 static 메소드이기때문 에현재사용하는문자열을참조하여생성하는것이아닌, static 하게호출하여사용 해야한다. 간단하게어떻게사용하는지, 다음의코드를보면이해가쉬울것이다. 이번에설명하는메소드들은자바에서문자열을다룰때 indexof() 메소드와더 불어가장많이사용하는메소드중하나다. 그래서, 꼭사용법을알아두어야만한다. 다음의예제를보자. public void substringcheck1() { String text="java technology"; Java technology 라는문자열이있을때, technology 라는단어만추출하려고 할때다음과같이 substring() 메소드를사용하면된다. char values[]=new char[]{'j','a','v','a'; String javatext=string.copyvalueof(values); String 의값을 char 배열로변환하는메소드 public void substringcheck1() { String text="java technology"; String technology=text.substring(5); System.out.println(technology); 리턴타입메소드이름및매개변수설명 char[] tochararray() 문자열을 char 배열로변환하는메소드여러분들이어떤 String 객체를만들더라도, 그객체는내부에 char 배열을포함한다. 방금전에살펴본 copyvalueof() 메소드에서 Java 라는값이 char 배열로저장되어있듯이, String 객체내부에는항상이러한 char 배열이포함되어있다는말이다. 이메소드도그리많이사용되지는않고, 사용법이매우간단하므로, 여러분들이직접 char 배열로변환한후그값들을출력해보자. text라는문자열의 t가시작하는위치가 5번째라는것은이미여러번설명했으니잘알고있을것이다. 이예제에있는것처럼 substring() 메소드에 5라는하나의정수값만지정하면 5번째부터 text 문자열이끝날때까지를모두잘라내라는의미다. 이메소드를컴파일하고, main() 메소드에서이메소드만수행하도록변경한후실행한결과는다음과같다. technology 78 1 부 2 장. String 79

18 그런데, 만약여러분들이 tech 라는단어만잘라내고싶을때에는어떻게해야할 까? 그럴때에는앞에있는표의두번째나세번째에있는메소드를사용하면된다. 이렇게변경한후컴파일및실행을해보면다음과같이원하는결과가출력된다. 다음과같이두줄을추가한후컴파일하고실행해보자. public void substringcheck1() { String text="java technology"; String technology=text.substring(5); System.out.println(technology); String tech=text.substring(5, 4); System.out.println(tech); 했다. tech 가 4 개의알파벳으로되어있는문자이기때문에두번째 index 를 4 로지정 결과가어떻게나올까? technology tech 이와같이 substring() 메소드를사용하면문자열에있는특정단어를마음대로 잘라낼수있다. 실제로여러분들이이 substring() 메소드를사용할때에는보통 indexof() 메소드와같이사용하여문자열을잘라내야만한다. 이렇게 indexof() 메 소드와함께 substring() 메소드를사용하는방법은이장의뒤에있는 직접해봅 시다 에서살펴보자. 문자열을여러개의 String 배열로나누는 split 메소드 리턴타입메소드이름및매개변수설명 2 분만생각해봅시다 String[] split(string regex) regex에있는정규표현식에맞추어문자열을잘라 String의배열로리턴한다. 아쉽게도결과는다음과같이예외가발생한다. String[] split(string regex, int limit) regex에있는정규표현식에맞추어문자열을잘라 String의배열로리턴한다. 이때 String 배열의크기는 limit 보다커서는안된다. technology Exception in thread "main" java.lang.stringindexoutofboundsexcepti on: String index out of range: -1 at java.lang.string.substring(string.java:1937) at d.string.stringsample.substringcheck1(stringsample.java:157) at d.string.stringsample.main(stringsample.java:17) 왜이런예외가발생하지? 라고생각하는독자도있을것이다. 앞에서설명한표 를잘보면첫번째매개변수는 beginindex 이고, 두번째매개변수는데이터의길이 가아닌 substring 이끝나는위치를말한다. 따라서, 다음과같이끝나는위치를 5+4 인 9 로지정해야만한다. String tech=text.substring(5,9); 자바에서문자열을여러개의문자열의배열로나누는방법은 String 클래스에선언된 split() 메소드를사용하는것과 java.util 패키지에선언되어있는 StringTokenizer 라는클래스를사용하는것이다. 만약여러분들이정규표현식을사용하여문자열을나누려고한다면 String 클래스의 split() 메소드를사용하면된다. 그렇지않고, 그냥특정 String 으로문자열을나누려고한다면 StringTokenizer 클래스를사용하는것이편하다. 특정알파벳이나기호하나로문자열을나누려고한다면 String 클래스의 split() 메소드를쓰든지, StringTokenizer 클래스를쓰든지큰상관없다. StringTokenizer 클래스에대한설명은 8장의 java.util 에서자세히다루니참고하기바란다. 다음의예를통해서 split 메소드와친해지자 부 2 장. String 81

19 public void splitcheck() { String text= "Java technology is both a programming language and a platform."; String[] splitarray=text.split(" "); for(string temp:splitarray) { System.out.println(temp); 특정형식에맞춰값을치환하는메소드 대소문자를바꾸는메소드 기본자료형을문자열로변환하는메소드 먼저가장앞에있는분류의메소드를살펴보자. 문자열을합치는메소드와공백을없애는메소드 예제는아주간단하다. text 에있는문자열을공백 space 으로나누어 splitarray 라 는 String 배열에담았다. 그리고나서배열에있는각각의값들을출력했다. main() 리턴타입 메소드이름및매개변수 설명 String concat(string str) 매개변수로받은 str을기존문자열의우측에붙인새로운문자열객체를생성하여리턴한다. 메소드에서이메소드만호출하도록한후실행해보자. 결과는다음과같다. String trim() 문자열의맨앞과맨뒤에있는공백들을제거한문자열객체를리턴한다. Java technology is both a programming language and a platform. 이번절에서는문자열의내용을자르는 split() 메소드에대해서살펴보았다. 하 지만, String 클래스에서제공하는메소드는여기서끝나지않는다. String 값을바꾸는메소드들도있어요 String API 설명의마지막으로, String 값을바꾸는메소드를알아보자. 문자열의값 을바꾸고, 변환하는메소드도다음과같이구분할수있다. 문자열을합치는메소드와공백을없애는메소드 솔직히말해서필자는자바에 concat() 이라는메소드가있는지이장을쓰면서처 음알았다. 그만큼자바에서는 concat() 메소드를쓸일이없다. 이렇게 concat() 메 소드를사용하여문자열을계속더할일이있다면, 이장의끝에있는 StringBuffer 나 StringBuilder 클래스를사용하여문자열을더하기바란다. trim() 메소드는공백을제거할때매우유용하게많이사용된다. 문자열의앞과 뒤에있는공백을일일이찾아서지워버릴필요가없이이메소드만사용하면되기 때문이다. trim() 메소드는아주많이사용되므로다음의예제를통해서확실히어떻 게동작하는지익혀두기바란다. public void trimcheck() { String strings[]=new String[]{ " a"," b "," c","d ","e f"," " ; for(string string:strings) { System.out.println("["+string+"] "); System.out.println("Trim["+string.trim()+"] "); 내용을교체replace 하는메소드 82 1 부 2 장. String 83

20 여러분들이책으로보기에는잘안보일수도있겠지만, a 앞에공백, b 앞뒤에공백, c 앞에여러공백, d 뒤에여러공백, e와 f 사이에여러공백, 그리고마지막에는공백만존재하는문자열이존재한다. 그리고나서, 원래문자열과 trim() 메소드를적용한문자열을출력한다. 각각어떤값이나올지생각해보자. 만약여러분들이 null 체크를하지않으면, 값이 null인객체의메소드를호출하면 NullPointerException 이발생한다. 따라서, 이와같이 String 을조작하기전에 null 체크하는습관을갖자. 내용을교체 (replace) 하는메소드 리턴타입메소드이름및매개변수설명 3 분만생각해봅시다 String replace(char oldchar, char newchar) 해당문자열에있는 oldchar의값을 newchar로대치한다. 결과는다음과같다. String replace(charsequence target, CharSequence replacement) 해당문자열에있는 target과같은값을 replacement로대치한다. [ a] Trim[a] [ b ] Trim[b] [ c] Trim[c] [d ] Trim[d] [e f] Trim[e f] [ ] Trim[] 이와같이대괄호로값들을감싸서보면원래값과 trim() 한값의차이를쉽게확 인할수있을것이다. trim() 메소드의용도는매우많지만, 작업하려는문자열이공 백만으로이루어진값인지, 아니면공백을제외한값이있는지확인하기에매우편리 하다. 다음의 if 문을통과하여 OK 를출력하면, 해당문자열은공백을제외한 char 값이하나라도존재한다는의미다. String String replaceall(string regex, String replacement) replacefirst(string regex, String replacement) 해당문자열의내용중 regex에표현된정규표현식에포함되는모든내용을 replacement로대치한다. 해당문자열의내용중 regex에표현된정규표현식에포함되는첫번째내용을 replacement로대치한다. replace 로시작하는메소드는문자열에있는내용중일부를변경하는작업을수 행한다. 참고로, 이메소드를수행한다고해서, 기존문자열의값은바뀌지않는다. 메 소드의설명만봐도어떻게동작하는지감이잡히겠지만, 예제를통해서살펴보자. public void replacecheck() { String text="the String class represents character strings."; System.out.println(text.replace('s', 'z')); ➊ System.out.println(text); ➋ System.out.println(text.replace("tring", "trike")); ➌ System.out.println(text.replaceAll(" ", " ")); ➍ System.out.println(text.replaceFirst(" ", " ")); ➎ String text=" a "; if(text!=null && text.trim().length() >0 ) { System.out.println("OK"); ➊ text 객체에있는 char s 를 z 로변환하는작업을수행한다. ➋ replace() 메소드를수행한후에기존의값이변경되는지를확인하기위해서현재 값을출력한다. ➌ CharSequence 타입의매개변수를사용하여값을변경한다. ➍ 정규표현식을사용하는 replaceall() 메소드의예이며, 공백을파이프 ( ) 로변환한다. ➎ replacefirst() 메소드를사용하여첫번째공백만파이프로변환한다 부 2 장. String 85

21 이 replacecheck() 메소드를수행한결과가어떻게나오는지생각해보자. 출력되는결과는다음과같다. 3 분만생각해봅시다 The String clazz reprezentz character ztringz. The String class represents character strings. The Strike class represents character strikes. The String class represents character strings. The String class represents character strings. 아마도여러분들의생각을크게벗어나지는않았을것이다. 하지만, 첫번째결과 를보면소문자 s 만 z 로변환된것을볼수있다. 즉, replace 관련메소드는대소문 자를구분하니참고하기바란다. 그리고, 자칫잘못하면변환하려고생각하지도않은 값이변환되어버릴수도있다. 따라서, replace 관련메소드를사용할때에는생각 을잘하고적용하기바란다. 특정형식에맞춰값을치환하는메소드 리턴타입메소드이름및매개변수설명 static String static String format(string format, Object... args) for mat(locale l, String format, Object... args) format에있는문자열의내용중변환해야하는부분을 args의내용으로변경한다. format에있는문자열의내용중변환해야하는부분을 args의내용으로변경한다. 단첫매개변수인 Locale 타입의 l에선언된지역에맞추어출력한다. format() 메소드는정해진기준에맞춘문자열이있으면, 그기준에있는내용을 변환한다. 자바에서 %s 는 String 을, %d 는정수형을, %f 는소수점이있는숫자, %% 는 % 를의미한다. 그외에도다양한기준이있는데, 이 format 에관련된내용은 9 장 public void formatcheck() { String text=" 제이름은 %s 입니다. 지금까지 %d 권의책을썼고, " +" 하루에 %f %% 의시간을책을쓰는데할애하고있습니다."; String realtext=string.format(text, " 이상민 ",4,10.5); //String realtext=string.format(text, " 이상민 ",4); System.out.println(realText); 된다. 아주간단한예다. 이렇게 format() 메소드를사용하면다음과같은결과가출력 제이름은이상민입니다. 지금까지 4권의책을썼고, 하루에 % 의시간을책을쓰는데할애하고있습니다. 그런데, 만약여러분들이출력만을위해서이메소드를사용하면굳이이렇게사 용할필요는없다. System.out.println() 메소드도있지만, System.out.format() 이라는메소드도있기때문이다. 그리고, 여기서여러분들이주의해야할사항이하 나있다. 대치해야할문자열이 3 개인데, format 뒤에 3 개이상의매개변수를나열 하는것은상관없다. 하지만, 2 개이하로매개변수만명시하면실행시예외가발생 한다. 다음과같이가장뒤에있는 10.5 값을지운예제를실행해보자. public void formatcheck() { String text=" 제이름은 %s 입니다. 지금까지 %d 권의책을썼고, " +" 하루에 %f %% 의시간을책을쓰는데할애하고있습니다."; //String realtext=string.format(text, " 이상민 ",4,10.5); String realtext=string.format(text, " 이상민 ",4); System.out.println(realText); 그러면다음과같이예외가출력된다. 의 Formatter 를참고하기바란다. 아주간단한예를통해서 format() 메소드의사 용법을알아보자 부 2 장. String 87

22 Exception in thread "main" java.util.missingformatargumentexception: Format specifier 'f' at java.util.formatter.format(formatter.java:2432) at java.util.formatter.format(formatter.java:2367) at java.lang.string.format(string.java:2769) at d.string.stringsample.formatcheck(stringsample.java:242) at d.string.stringsample.main(stringsample.java:24) 리턴타입 static String valueof(float f) static String valueof(int i) static String valueof(long l) static String valueof(object obj) 메소드이름및매개변수 참고 Locale은지역적으로다른표현형식을제공하기위한것이다. 보통 Locale을지정하지않으면기본적으로자바프로그램이수행되는 OS의지역정보를기본으로따른다. 여기에나열된메소드들은기본자료형을 String 타입으로변환한다. 이 valueof() 메소드를사용하여기본자료형값들을문자열로변경해도되지만, 다음 과같이변환해도된다. 대소문자를바꾸는메소드 byte b=1; String byte1=string.valueof(b); String byte2=b+""; 리턴타입메소드이름및매개변수설명 String tolowercase() 모든문자열의내용을소문자로변경한다. String tolowercase(locale locale) 지정한지역정보에맞추어모든문자열의내용을소문자로변경한다. String touppercase() 모든문자열의내용을대문자로변경한다. String touppercase(locale locale) 지정한지역정보에맞추어모든문자열의내용을대문자로변경한다. 이렇게 byte1 처럼변환하나, byte2 처럼변환하나출력해보면동일한값이출력된다. 다시말해서대부분기본자료형을 String 타입으로변환할필요가있을때에는 String 과합치는과정을거친다. 그럴경우에는별도로 valueof() 메소드를사용할필요까지는없다. 하지만, String 으로변환만해놓고별도의문자열과합치는과정이없을경우에는 valueof() 메소드를사용하는것을권장한다. 그리고, 또한가지기억해야하는것이있는데, 바로 valueof() 메소드의매개변 tolower 로시작하는메소드는모든대문자를소문자로, toupper 로시작하는메소드는모든소문자를대문자로변경하는메소드다. 사용법이그리어렵지않으므로별도의예제는다루지않겠다. 직접확인해보기바란다. 기본자료형을문자열로변환하는메소드 수로객체Object 가넘어왔을경우이다. 만약여러분들이 tostring() 을구현한객체나, 정상적인객체를 valueof() 메소드에넘겨주면 tostring() 의결과를리턴해준다. 하지만, null 인객체의경우에는이야기가달라진다. null 인객체는 tostring() 메소드를사용할수없다. 이장의앞부분에서살펴본것처럼, NullPointerException 이발생해버린다. 그러한결과를방지하기위해서는객체를출력할때 valueof() 메 리턴타입 static String valueof(boolean b) static String valueof(char c) 메소드이름및매개변수 소드를사용하면좋다. valueof() 메소드는객체가 null 이면 null 이라는문자열을 리턴해주기때문이다. 만약 null 이아니면, tostring() 메소드를호출한결과가리턴 된다. System.out.print() 나 System.out.println() 메소드에서 null 인객체를출 static String valueof(char[] data) static String valueof(char[] data, int offset, int count) static String valueof(double d) 이어짐 력했을때 NullPointerException 이발생하지않는이유도이때문이다. 이번절에서는문자열의내용을변환하는메소드들을알아보았다. 지금까지이장 에서배운메소드가 String 클래스의대부분이라도해도무방하다. 메소드들의이름 88 1 부 2 장. String 89

23 을꼭외울필요는없더라도, 어떤작업을수행하는메소드가있다는것을알아두는 것은매우중요하다. 그래서, 결과가이와같이나타나는것이다. 이메소드의네번째줄에다음과같이 한줄을추가하자. 절대로사용하면안되는메소드가하나있어요!!!!! String 클래스에있는여러메소드중에서초보인여러분들이절대사용해서는메소 드가있다. 바로 intern() 이라는메소드다. 이메소드는자바로구현되지않고 C 로 구현되어있는 native 메소드중하나다. native 메소드이기때문에쓰지말라는것 이아니고, 시스템의심각한성능저하를발생시킬수도있기때문이다. 앞에서다음과같이 String 객체를생성했을때의결과를이야기했다. public void interncheck() { String text1="java Basic"; String text2="java Basic"; String text3=new String("Java Basic"); System.out.println(text1==text2); System.out.println(text1==text3); System.out.println(text1.equals(text3)); 다시한번정리하는차원에서, 이 interncheck() 메소드의결과를생각해보자. public void interncheck() { String text1="java Basic"; String text2="java Basic"; String text3=new String("Java Basic"); text3=text3.intern(); System.out.println(text1==text2); System.out.println(text1==text3); System.out.println(text1.equals(text3)); 이렇게해놓고수행하면결과가어떻게나올까? 결과는예상외로다음과같이나온다. true true true 1 분만생각해봅시다 결과는다음과같이나온다. true false true 2 분만생각해봅시다 text1 과 text2 와같이객체를생성하면, String 클래스에서관리하는 Constant 풀 pool 에해당값이있으면기존에있는객체를참조하고, text3 와같이 String 객체 를생성하면같은문자열이풀에있든말든새로운객체를생성한다고이야기했다. 왜이러한결과가나올까? new String(String) 으로생성한문자열객체라고할지라도, 풀에해당값이있으면, 풀에있는값을참조는객체를리턴한다. 만약동일한문자열이존재하지않으면풀에해당값을추가한다. 따라서, intern() 메소드를수행한뒤에문자열은 equals() 메소드가아닌, == 으로동일한지비교할수가있다. equals() 메소드로비교하는것과 == 으로비교하는것의성능차이는많다. == 으로비교하는것이훨씬빠르다. 그런데, 왜필자가이메소드를쓰지말라고하는것일까? 만약새로운문자열을쉴새없이만드는프로그램에서 intern() 메소드를사용하여억지로 Constant 풀에값을할당하도록만들면, 저장되는영역은한계가있기때문에그영역에대해서별도로메모리를청소하는단계를거치게된다. 따라서, 작은연산하나를빠르게하기위해서전체자바시스템의성능에악영향을주게된다 부 2 장. String 91

24 여러분들이만드는애플리케이션에서생성하는문자열이정해져있고, 그문자열에대해서만 intern() 메소드를호출하여사용할경우에는문제가되지않을수도있다. 하지만, 생성되는문자열이완전히정해져있는시스템은거의없다. 따라서, 절대로 intern() 메소드는사용하지마라. 이절의모든설명을이해하지못해도되지만, intern() 메소드를사용해서는안된다는것만은꼭기억하기바란다. StringBuffer 와 StringBuilder 클래스는문자열을더하더라도새로운객체를생성하지않는다. 그렇다고더하기 (+) 기호를사용하여더할수있다는말이아니다. 이두개의클래스에서가장많이사용하는메소드는 append() 라는메소드다. append() 메소드는매개변수로모든기본자료형과참조자료형을모두포함한다. 따라서, 어떤값이라도이메소드의매개변수로들어갈수있다. 보통다음과같이사용한다. immutable 한 String 의단점을보완하는클래스에는 StringBuffer 와 StringBuilder 가있다 String 은 immutable 한객체다. immutable 이라는말은사전적인의미로 불변의 라는의미다. 다시말해서한번만들어지면더이상그값을바꿀수없다. 무슨말이 야? 더하기하면잘만더해지는데. 아니다. 그생각은틀렸다. String 객체는변하 지않는다. 만약여러분들이 String 문자열을더하면새로운 String 객체가생성되고, 기존객체는버려진다. 그러므로, 여러분들이계속하나의 String 을만들어계속더하 는작업을한다면, 계속쓰레기를만들게된다. 방금이야기한내용은다음과같은경 우를말한것이다. StringBuilder sb=new StringBuilder(); sb.append("hello"); sb.append(" world"); 지금언뜻보기에는별차이가없어보일것이다. 하지만, append() 메소드에넘어 가는매개변수가이처럼정해져있는문자열이라면사용하나마나지만, 매개변수가 변수로받은 ( 항상변하는 ) 값이라면이야기는달라진다. 그리고, 이메소드는다음과 같이 append() 메소드를여러개붙여서사용해도무방하다. StringBuilder sb=new StringBuilder(); sb.append("hello").append(" world"); String text="hello"; text=text+" world"; 세미콜론이나오기전에계속 append() 메소드를붙여도상관없다. 왜냐하면, append() 메소드를수행한후에는해당 StringBuilder 객체가리턴되므로, 그객체 이경우, Hello 라는단어를갖고있는객체는더이상사용할수없다. 즉, 쓰레기가되며, 나중에 GCGarbage collection( 가비지컬렉션 ) 의대상이된다. 이러한 String 클래스의단점을보완하기위해서나온클래스가 StringBuffer 와 StringBuilder 다. 두클래스에서제공하는메소드는동일하다. 하지만, StringBuffer 는 Thread safe하다고하며, StringBuilder 는 Thread safe하지않다고한다. 아직여러분들이쓰레드라는것에대해서배우지않았기때문에무슨말인지이해가되지는않겠지만, 여하튼기능은같지만 StringBuffer 가 StringBuilder 보다더안전하다고만기억해두기바란다. 속도는 Thread safe하지않는 StringBuilder 클래스가더빠르다. 에계속붙이는작업을해도무방한것이다. 추가로, JDK 5 이상에서는여러분들이 String 의더하기연산을할경우, 컴파일할때자동으로해당연산을 StringBuilder 로변환해준다. 따라서, 일일이더하는작업을변환해줄필요는없으나, for 루프와같이반복연산을할때에는자동으로변환을해주지않으므로, 꼭필요하다. 마지막으로 String과 StringBuilder, StringBuffer 클래스의공통점에대해서알아보자. 공통점이라면, 모두문자열을다룬다는점이다. 그런데, 또다른공통점은 CharSequence 인터페이스를구현했다는점이다. 따라서, 여러분들이이세가지중하나의클래스를사용하여매개변수로받는작업을할때 String 이나 StringBuilder 타입으로받는것보다는 CharSequence 타입으로받는것이좋다 부 2 장. String 93

25 그러면언제 StringBuilder 를사용하고, 언제 StringBuffer 클래스를사용해 야할까? 일반적으로하나의메소드내에서문자열을생성하여더할경우에는 StringBuilder 를사용해도전혀상관없다. 그런데, 어떤클래스에문자열을생성하 직접해봅시다 여더하기위한문자열을처리하기위한인스턴스변수가선언되었고, 여러쓰레드에 서이변수를동시에접근하는일이있을경우에는반드시 StringBuffer 를사용해야 만한다. 정리하며 이번장에서는자바에서가장많이활용되는 String 클래스와이클래스에서제공하는메소드들에대해서아주자세히살펴보았다. String 클래스가그만큼자주사용되고중요하기때문에필자가일부러자세히설명한것이다. 앞으로설명하는클래스들은이렇게까지자세하게설명하지않고, 주요클래스의주요메소드만알아볼예정이다. String 클래스를잘사용해야만메모리를효율적으로사용할수있고, 여러 String 을더하는연산이존재할경우에는 StringBuilder 나 StringBuffer 클래스를적절하게선택하여활용해야만한다. 어떤언어로개발하든간에문자열에서필요한데이터를추출해내는작업은매우많이사용되고, 중요하다. 따라서, 여러분들은 String 클래스에서제공하는메소드들을이용하여문자열을떡주무르듯이다룰수있어야한다. 다음의문장이있다. The String class represents character strings. 이문장은 String 클래스의 API 문서에있는가장첫문장이다. 이문장에서여러분들이필요한데이터를추출하는것을연습해보자. 1 API 문서에서 String 클래스를찾아필요할때마다참조할수있도록하자. 2 d.string.practice 패키지에 UseStringMethods 라는클래스를만들고, main() 메소드도만들자. 3 public void printwords(string str) 로선언된메소드를만들자. 이메소드는 str 문장의단어들을출력한다. 예제문장을 str 값으로전달하여, main() 메소드에서이메소드를호출하여결과를확인해보자. 힌트 split() 메소드를사용결과 The String class represents character strings 부 2 장. String 95

26 직접해봅시다 직접해봅시다 4 public void findstring(string str,string findstr) 메소드를만들자. 이메소드는 str 중에서 findstr 로넘겨준값과동일한단어의첫번째위치를출력한다. 예제문장을 str 값으로전달하고, findstr 에는 string 을넘겨주자. main() 메소드에서이메소드를호출하여결과를확인해보자. 힌트 indexof() 메소드를사용결과 string is appeared at 38 7 public void printcontainwords(string str,string findstr) 메소드를만들자. 이메소드는 str 문자열에서 findstr 이포함된단어를출력한다. 예제문장을 str 값으로전달하고, findstr 는 ss 를넘겨주자. main() 메소드에서이메소드를호출하여결과를확인해보자. 힌트 split(), contains() 메소드사용결과 class contains ss 5 public void findanycasestring(string str,string findstr) 메소드를만들자. 이메소드는 str 중에서 findstr 로넘겨준값과 대소문자구분없이 동일한단어의첫번째위치를출력한다. 예제문장을 str 값으로전달하고, findstr 에는 string 을넘겨주자. main() 메소드에서이메소드를호출하여결과를확인해보자. 힌트 tolowercase(), indexof() 메소드를사용결과 string is appeared at 4 6 public void countchar(string str,char c) 메소드를만들자. 이메소드는 str 에서 c와동일한 char의개수를출력한다. 예제문장을 str 값으로전달하고, c는 s 를넘겨주자. main() 메소드에서이메소드를호출하여결과를확인해보자. 힌트 tochararray() 메소드사용결과 char 's' count is 부 2 장. String 97

27 정리해봅시다 정리해봅시다 문제에대한답은아래에서직접문제를푸시고확인할수있습니다. 9 문자열에 한국 이라는단어의위치를찾아내려고할때에는 String 의어떤메소드를사용해야하나요? 1 String 클래스는 final 클래스인가요? 만약그렇다면, 그이유는무엇인가요? 10 9 번문제의답에서 한국 이문자열에없을때결과값은무엇인가요? 2 String 클래스가구현한인터페이스에는어떤것들이있나요? 11 문자열의 1번째부터 10번째위치까지의내용을 String 으로추출하려고합니다. 어떤메소드를사용해야하나요? 3 String 클래스의생성자중에서가장의미없는 ( 사용할필요가없는 ) 생성자는무엇인가요? 12 문자열의모든공백을 * 표시로변환하려고합니다. 어떤메소드를사용하는것이좋을까요? 4 String 문자열을 byte 배열로만드는메소드의이름은무엇인가요? 13 String 의단점을보완하기위한두개의클래스는무엇인가요? 5 String 문자열의메소드를호출하기전에반드시점검해야하는사항은무엇인가요? 번의답에서문자열을더하기위한메소드의이름은무엇인가요? 6 String 문자열의길이를알아내는메소드는무엇인가요? 7 String 클래스의 equals() 메소드와 compareto() 메소드의공통점과차이점은무엇인가요? 8 문자열이 서울시 로시작하는지를확인하려면 String 의어떤메소드를사용해야하나요? 98 1 부 2 장. String 99

PowerPoint Presentation

PowerPoint Presentation Package Class 2 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

쉽게

쉽게 Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

슬라이드 1

슬라이드 1 UNIT 6 배열 로봇 SW 교육원 3 기 학습목표 2 배열을사용핛수있다. 배열 3 배열 (Array) 이란? 같은타입 ( 자료형 ) 의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;...

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 자바의기본구조? class HelloJava{ public static void main(string argv[]){ system.out.println( hello,java ~ ){ } } # 하나하나뜯어살펴봅시다! public class HelloJava{ 클래스정의 public static void main(string[] args){ System.out.println(

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

PowerPoint Presentation

PowerPoint Presentation 자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 20 장패키지 이번장에서학습할내용 패키지의개념 패키지로묶는방법 패키지사용 기본패키지 유틸리티패키지 패키지는연관된클래스들을묶는기법입니다. 패키지란? 패키지 (package) : 클래스들을묶은것 자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 그림 20-1. 패키지의개념 예제 패키지생성하기 Q: 만약패키지문을사용하지않은경우에는어떻게되는가?

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint 웹 연동 기술.pptx 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 # 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음 반환형메소드이름 ( 매개변수 ) { 실행문장 1; : 실행문장 N; } 메소드의종류 Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행 Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드 Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 클래스의사용법은다음과같다. PrintWriter writer = new PrintWriter("output.txt");

More information

@ p a g e c o n te n tt y p e = " te x t/ h tm l;c h a rs e t= u tf- 8 " fo r (in t i= 0 ; i< = 1 0 ; i+ + ) { o u t.p rin tln (" H e llo W o rld " + i + " < b r/> " ); = re s u lt + re s u lts u m ()

More information

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp 1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr 실제세계는객체로이루어진다. 2 객체와메시지 3 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4 객체 5 객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공 메신저의새로운혁신 채팅로봇 챗봇 (Chatbot) 입문하기 소 이 메 속 : 시엠아이코리아 름 : 임채문 일 : soulgx@naver.com 1 목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 예외처리 배효철 th1g@nate.com 1 목차 예외와예외클래스 실행예외 예외처리코드 예외종류에따른처리코드 자동리소스닫기 예외처리떠넘기기 사용자정의예외와예외발생 예외와예외클래스 구문오류 예외와예외클래스 구문오류가없는데실행시오류가발생하는경우 예외와예외클래스 import java.util.scanner; public class ExceptionExample1

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770> 기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

4장.문장

4장.문장 문장 1 배정문 혼합문 제어문 조건문반복문분기문 표준입출력 입출력 형식화된출력 [2/33] ANSI C 언어와유사 문장의종류 [3/33] 값을변수에저장하는데사용 형태 : < 변수 > = < 식 > ; remainder = dividend % divisor; i = j = k = 0; x *= y; 형변환 광역화 (widening) 형변환 : 컴파일러에의해자동적으로변환

More information

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå 기초통계프로그래밍 클래스, 객체, 변수, 메소드 hmkang@hallym.ac.kr 금융정보통계학과 강희모 ( 금융정보통계학과 ) 기초통계프로그래밍 1 / 26 자바구성파일 소스파일 소스파일 : 사용자가직접에디터에입력하는파일로자바프로그램언어가제공하는형식으로제작 소스파일의확장자는.java 임 컴파일 : javac 명령어를이용하여프로그래머가만든소스파일을컴파일하여실행파일.class

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

TEST BANK & SOLUTION

TEST BANK & SOLUTION TEST BANK & SOLUTION 어서와자바는처음이지!" 를강의교재로채택해주셔서감사드립니다. 본문제집을만드는데나름대로노력을기울였으나제가가진지식의한계로말미암아잘못된부분이있을것으로사료됩니다. 잘못된부분을발견하시면 chunik@sch.ac.kr로연락주시면더좋은책을만드는데소중하게사용하겠습니다. 다시한번감사드립니다. 1. 자바언어에서지원되는 8 가지의기초자료형은무엇인가?

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2 예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 kkman@sangji.ac.kr 2 예외 (exception) 실행시간에발생하는에러 (run-time error) 프로그램의비정상적인종료잘못된실행결과 예외처리 (exception handling) 기대되지않은상황에대해예외를발생야기된예외를적절히처리 (exception handler) kkman@sangji.ac.kr

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

PowerPoint Presentation

PowerPoint Presentation Class : Method Jo, Heeseung 목차 section 1 생성자 (Constructor) section 2 생성자오버로딩 (Overloading) section 3 예약어 this section 4 메소드 4-1 접근한정자 4-2 클래스메소드 4-3 final, abstract, synchronized 메소드 4-4 메소드반환값 (return

More information

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - Chap12-OOP.ppt 객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

Microsoft PowerPoint - lec7_package [호환 모드]

Microsoft PowerPoint - lec7_package [호환 모드] Lecture 7: Package 패키지의선언 패키지의사용 JAR 파일 자바의언어패키지 2 연관된클래스나인터페이스를하나의단위로묶는방법 장점 여러개의클래스와인터페이스를하나의그룹으로다루는수단을제공 클래스이름사이의충돌문제를해결 패키지의종류 기본패키지 : java.lang, java.util, java.io, java.awt 사용자정의패키지 3 선언형태 package

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\) Session 을이용한현재로그인한사용자의 숫자구하기 작성자 : 김성박 ( 삼성 SDS 멀티캠퍼스전임강사 ) email : urstory@nownuri.net homepage : http://sunny.sarang.net - 본문서는http://sunny.sarang.net JAVA강좌란 혹은 http://www.javastudy.co.kr 의 칼럼 란에서만배포합니다.

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

No Slide Title

No Slide Title 상속 이충기 명지대학교컴퓨터공학과 상속 Q: 건설회사는기존아파트와조금다르거나추가적인특징들을가진새아파트를지을때어떻게하는가? A: 2 상속 상속 (inheritance) 은클래스들을연관시키는자연스럽고계층적인방법이다. 상속은객체지향프로그래밍의가장중요한개념중의하나이다. 상속은 은 이다 라는관계 (is-a relationship) 를나타낸다. 이관계를적용하여클래스들을상하관계로연결하는것이상속이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

Microsoft PowerPoint - lec12 [호환 모드]

Microsoft PowerPoint - lec12 [호환 모드] 제네릭 제네릭클래스 제네릭인터페이스 제네릭메소드 형매개변수의제한 어노테이션 어노테이션형태시스템정의어노테이션사용자정의어노테이션 kkman@sangji.ac.kr 2 제네릭 (generic) 클래스나메소드에자료형을매개변수형식으로사용할수있는기능 자료형과무관하게알고리즘을기술 예전에작성한알고리즘을쉽게재사용가능 어노테이션 (annotation) 프로그램요소에다양한종류의속성정보를추가하기위해서사용

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 배효철 th1g@nate.com 1 목차 표준입출력 파일입출력 2 표준입출력 표준입력은키보드로입력하는것, 주로 Scanner 클래스를사용. 표준출력은화면에출력하는메소드를사용하는데대표적으로 System.out.printf( ) 를사용 3 표준입출력 표준출력 : System.out.printlf() 4 표준입출력 Example 01 public static void

More information