String 9

[JAVA] 자바의 String과 StringBuffer

오늘은 String과 StringBuffer의 차이점에 대해서 공부해보도록 하겠습니다. String 지난 포스팅에서도 설명했지만 String은 불변성(immutable)을 가지고 있습니다. 불변성이란 말 그대로 변하지 않는 것을 의미합니다. 그래서 데이터가 한번 생성되고 나면 그 뒤에는 변하지 않습니다. String이 한번 선언되면 변하지 않는다니 뭔가 잘 이해가 안되시죠 간단한 코드로 알아봅시다. String s = "Hello"; System.out.println(s.hashCode()); s += ", Java"; System.out.println(s.hashCode()); System.out.println(s); 결과를 보면 s를 출력했을때의 연산은 잘 나왔지만 주소값이 앞에 두 개가 다른 것을 ..

Java/JAVA 2021.09.19

[JAVA] String pool

자바에서 String은 참조 타입이지만 기본 타입처럼 사용이 가능합니다. String은 불변성을 가지고 있기때문에 String이 아닌 다른 타입과 연산을 할 경우 String 타입으로 인식하게 됩니다. 간단한 코드를 통해 쉽게 알아보겠습니다. package test; public class Test { public static void main(String[] args) { String s = "Java"; String h = "Java"; String newS = new String("Java"); System.out.println(s + 1 + 2); System.out.println(1 + 2 + s); System.out.println(s); System.out.println(h); System...

Java/JAVA 2021.09.18

[CS50] 문자열 복사

지난 포스팅에서 문자열이 메모리에 어떤 방식으로 저장되어있는지, 또 어떻게 불러오고 비교하는지에 대해 공부해봤습니다. 그렇다면 문자열을 다른 곳에 복사할 때는 어떤 방법을 써야 하는지 공부해보도록 하겠습니다. 아래와 같이 문자열이 어떻게 복사가 되는지 보기위해 아래와 같이 문자열을 복사해서 첫 문자를 대문자로 바꾸는 코드를 작성해 보겠습니다. #include #include #include int main(void) { string s = get_string("s: "); string t = s; t[0] = toupper(t[0]); printf("s: %s\n", s); printf("t: %s\n", t); } 처음 입력은 emma로 전부 소문자로 입력한뒤 결과를 봤는데 t뿐 아니라 s까지도 대문자..

CS 기초/메모리 2021.08.22

[CS50] 문자열 비교

오늘은 문자열이 두 개일 때 같은 내용을 담고 있는지?, 또 이 두 개가 직접적으로 비교가 가능한지에 대해 공부해보도록 하겠습니다. 지난 포스팅에서 문자열은 각 문자의 배열이고 각 문자는 메모리에 서로 다른 주소 값을 가지고 있다는 것을 공부했습니다. 실제로 확인해보면 #include int main(void) { char *s = "EMMA"; printf("%p\n", &s[0]); printf("%p\n", &s[1]); printf("%p\n", &s[2]); printf("%p\n", &s[3]); } 이렇게 코드를 작성하고 실행했을 때 주소값이 다르게 출력되는 것을 확인할 수 있습니다. ** 여기서 주소값을 보면 첫 번째 문자인 "E"를 시작으로 메모리상에 바로 옆에 저장되어있는 것을 볼 수 ..

CS 기초/메모리 2021.08.21

[CS50] 문자열

지금까지 문자열을 string이라는 자료형을 사용해 저장해왔습니다. 그런데 C에는 string이 실제로 존재하지 않는 자료형이라고 합니다. 그렇다면 문자열이 실제로 메모리상에 어떻게 저장되어있는지, 저장되어있는 문자열에 어떻게 접근해야 하는지 공부해보도록 하겠습니다. 지금까지 배우면서 문자열을 변수에 저장하기 위해 CS50 라이브러리에 있는 string 자료형을 사용해왔습니다. 예전부터 문자열은 문자의 배열이라고 배웠는데 만약 string s = "EMMA"; 라는 코드가 있다면 그림과 같이 s[0], s[1], ... 처럼 하나의 문자가 배열의 한 부분을 차지하고 마지막엔 \0인 null 종단 문자로 문자열의 끝을 나타내 줬습니다. 그렇다면 문자열의 주소는 어떻게 가리키게 될까요?? 위의 변수 s는 이..

CS 기초/메모리 2021.08.20

[CS50] 문자열의 활용

지금까지 문자열의 기본적인 개념들을 학습해봤습니다. 이번 포스팅에서는 문자열을 활용하여 특정 문자를 다른 문자로 치환하거나 문자열 안에 포함되어있는 문자를 검색해보는 방법에 대해 공부해보도록 하겠습니다. 문자열의 길이 및 탐색 사용자로부터 문자열을 입력받아 문자열을 출력하기 위해서는 문자열의 끝을 알아야합니다. 그렇다면 정해지지 않은 문자열의 끝은 어떻게 알 수 있을까요? 문자열의 끝을 알수있는 방법 중 하나는 인덱스의 문자가 종단 문자(\0)와 일치하는지 검사하는 것입니다. for (int i = 0; s[i] != '\0'; i++){ ..... } s라는 문자열이 있다고 했을 때 이런 식으로 길이를 구할 수 있습니다. 다른 방법은 strlen( )이라는 함수를 사용하는 것입니다. #include #..

CS 기초/배열 2021.08.09

[CS50] 문자열과 배열

C뿐 아니라 많은 프로그래밍 언어들은 문자열을 저장하기 위해 string 자료형을 사용했습니다. 문자열이라는 단어는 문자가 나열되어있다. 즉 배열되어있다.라는 의미로 추측해볼 수 있는데요. 이런 관점에서 string 자료형이 C에서 어떻게 정의되어있는지 배열과 관련해서 공부해보도록 하겠습니다. string은 말 그대로 문자(char)의 배열이었습니다. 만약 string s = "HI!"; 로 정의되어 있다면 s는 문자열이기 때문에 메모리상에 'H', 'I', '!'로 저장되어 있을겁니다. 그런데 사실 문자열은 저번 포스팅에서 설명했듯이 길이가 정해져 있지 않기때문에 메모리의 크기 역시 정해져있지 않습니다. 그럼 string이 연속으로 정의되어있다면 어떻게 구분할까요?? 그래서 string에는 종단 문자인..

CS 기초/배열 2021.08.08

[CS50] 자료형, 형식 지정자, 연산자

C는 정수형이나 문자열 이외에도 다양한 데이터 타입이 정의되어 있는데 어떠한 타입이 있는지, 또 그것을 다양한 연산자를 통해 조건문이나 반복문으로 설정해 값을 계산하는 방법을 공부해보도록 하겠습니다. 먼저 데이터 타입으로 정의되어 있는 것 - int : 특정 크기 또는 특정 비트까지의 정수 (예) 1, 5, 40, -4, 0 - long : 더 큰 크기의 정수 - float : 부동소수점을 갖는 실수 (예) 3.14, 0.0, -29.34 - double : 부동소수점을 포함한 더 큰 실수 - char : 문자 하나 (예) 'a', 'B', '?' - string : 문자열 - bool : 불리언 (예) true, false, 1, 0, yes, no 그렇다면 왜 다양한 데이터 타입이 필요할까요? 기본적..

CS 기초/C언어 2021.08.01

[CS50] 문자열

모든 언어가 그렇듯 문자열을 다루기 위해서는 문자열 형식을 가진 변수부터 선언해줘야 합니다. 오늘은 사용자로부터 문자열을 입력받고 입력받은 문자열을 다른 문자열과 합쳐서 출력하는 프로그램을 작성해보겠습니다. 혹시나 실습이 필요하신분들은 https://sandbox.cs50.io/ CS50 Sandbox Temporary programming environments for students and teachers. sandbox.cs50.io 여기서 바로 create눌러서 시작하시면 실습하기 수월합니다. 이렇게 만들어진 스크래치 블록이 있다고 한다면 C로는 어떻게 표현해야 할까요? 지난 포스팅에 say는 printf와 같은 역할을 한다고 공부했습니다. 그렇다면 ask는 어떨까요? ask함수를 C로 가져왔을 ..

CS 기초/C언어 2021.07.29