20.01.07 목요일 C++ 강의정리
'C++의 객체지향은 무엇을 위한 것인가??' 라는 대학교 4년동안의 질문을 잘 해결해준 답변이라 정리해봄
객체지향과 절차지향이 분리가 잘되는건 아님
객체지향도 절차지향적으로 코드를 작성하지만 절차를 기술할 때 객체를 중심으로 코드를 작성하는 것
C스타일의 코드는 내부적으로 어떻게 구현이 되어있는지 다 보임
예를들면 배열의 크기를 어느정도로 설정했는지 같은
char s2[100] = "hello";
char s3[] = "world";
s2의 길이를 100으로 정했지만
만약 이보다 더 긴 문자열이 들어왔을 경우 발생하는 문제를 계속 생각해야하고
문자열 길이 바꿀 때마다 배열 크기 계속 생각해줘야함 > 귀찮음
C++ 의 string 은
string s0 = "hello";
string s1 = "world";
string 클래스 내부에서 배열의 크기 라던지 그런 걸 다 알아서 정해지기 때문에 신경쓰지 않아도됨
물론 string 내부적으로 char 배열을 할당해서 사용하겠지만
사용자는 char 배열에 얼마가 할당됐고 이런 사실들을 모름 > 정보의 은닉성, 캡슐화
문자열을 합치는 경우를 생각해보자
strcat은 문자열을 합치는 함수
char s2[100] = "hello";
char s3[] = "world";
strcat(s2, s3);
string s0 = "hello";
string s1 = "world";
s0.append(s1);
strcat 보다 더 한눈에 들어옴
C++을 모르지 않아도 append 라는 단어만 보면 s0과 s1을 합치는거구나 라고 알수있음
이렇게 코드를 깔끔하게 만들고 가독성을 높일 수 있음
append 함수 사용하는 사용자에게 중요한 건 s0가 s1에 붙는다는 게 중요한거지 배열사이즈까지 알아야할 필요없잖아
이럴 때는 exception이 발생할 수 있으니 조심하고 문자열 길이 길어지면 배열 크기 다시 조정해야한다 같은 사소한 게 아니라는것