정글에서 온 개발자

1/1 오픈소스, C++ 본문

TIL

1/1 오픈소스, C++

dev-diver 2025. 1. 1. 23:55

오픈소스

자유 소프트웨어 vs 오픈 소스

대부분의 자유 소프트웨어는 오픈소스다. 자유 소프트웨어가 좀 더 자유에 진심이다.
그래서 자유소프트웨어를 오픈소스라고 부르면 화낸다.

자유 소프트웨어와 오픈 소스 사이에는 자유를 도덕적 문제로 보는지(자유 소프트웨어), 실용적 문제로 보는지 (오픈 소스)차이가 있지만 라이선스를 보기 전까지는 큰 차이를 느끼기 힘들다.

라이선스

OSI 라이선스가 없으면 오픈소스가 아니다.  그냥 소스 이용가능일 뿐이다.
GPL, MIT, 아파치 라이선스 모두 OSI(Open Source Initiative) 라이선스이다. 
(; Open System Interconnection 7계층과 관계 없음)

방임형 라이선스

  • 오픈 소스 라이선스의 파생 저작물을 원 저작물과 다르게 할 수 있다.
  • 또한 원래 코드 그대로나 수정소스를 그대로 상업화 할 수 있다.
  • 라이선스를 변경할 수 있다(독점 등으로)  단, 원래 소스의  라이선스는 반드시 고지하는 등 제약사항이 있다.
  • Apache, MIT 라이선스가 대표적 . MIT가 가장 방임적이다.

카피레프트 라이선스

  • 자유롭게 활용하는 데 좀 더 제약이 있는 다른 라이선스로 바꾸면 안된다.
  • GPL이 대표적

오픈소스 기여를 포트폴리오로 쓰는 것에 관하여

이력서가 보여주는 것은 두가지다.

  1. 지난 직책에서 한 일
  2. 해당 업무에서 만들어낸 차이

고용주는 타당한 이유로 일을 잘하고 전체 팀과 회사를 어떤 방향으로 움직여줄 팀원을 원한다. 즉, 차이를 만들어 낼 사람을 바란다.
이력서가 '한 일'을 보여준다면 포트폴리오는 '어떻게 했는지'를 드러낸다.

무엇을 했는지가 더 중요하다(이력서가 더 중요하다).  '어떻게는' 면접관마다 자신만의 특정한 선호가 있기 때문이다.

막 시작한 사람에게 추천

  • 라이브러리, 플러그인, 작은 위성 프로젝트
  • 유니티용 플러그인
  • 그리고 초보자에게 친절한 커뮤니티를 찾자!

생각한 점

방임형 라이선스는 오픈소스를 사용해서 판매를 해도 되게 때문에 마케팅을 잘 하는 사람이 더 잘 팔수도 있다. 그러나 오픈소스임을 명시해야 하기 때문에 뭔가 부가가치를 더해서(유지 보수 지원 등) 팔지 않으면 소비자들은 원래의 무료 상품을 사용하게 될 것이다.

찾아본 사이트들

참고

오픈 소스로 미래를 연마하라 - https://product.kyobobook.co.kr/detail/S000001033085


C++ - 문자열 스트림

스트림과 문자열을 서로 변환하는데 유용함

stringstream은 읽기와 쓰기를 둘 다 할 수 있고,
istringstream은 읽기만,     ( >> 연산만)
ostringstream은 쓰기만 할 수 있다. (<< 연산만)

세 스트림 모두다  .str()로 버퍼에서 읽기가 가능하고,  <T> ss("스트링") 로 쓰기가 가능하다.

또 한가지 주의할 점은 cin, cout과 다르게, 읽기 연산을 하면서 버퍼가 소비되지 않는다.
따로 지워주려면 .str("")로 내용을 지워야 한다.  error비트 등의 청소는  .clear()로 한다.

활용처

parse()가 없는 c++에서 parse를 구현하는데 사용하거나, string에서 +연산의 비효율을 극복하기 위해 사용할 수 있다.

Parse

string data = "apple,banana,orange";
stringstream ss(data);
string fruit;

vector<string> vec;
while (getline(ss, fruit, ',')) {
	vec.push_back(fruit);
}

String 만들기

vector<string> vec = {"a","b","c"};
ostringstream ss;
for(auto &v : vec){
	ss << v;
}
string str = ss.str();

str.push_back()으로 추가하는 것보다 메모리 재할당시 오버헤드가 적다.