int main(){ char *pt = "apple"; printf("%s \n", pt); return 0; } 다음과 같은 코드가 있다. pt값은 변경이 될 수 없다. 이유는 "apple"이라는 문자열은 문자열 상수로 상수가 저장되는 영역에 저장되게 된다. 그 저장된 "apple"이라는 문자열 상수에 pointer가 주소를 가르키는 꼴이 되고 만다. 상수는 바꿀 수 없기 때문에 상수 값 변경한다면 문제가 생길 수 있고, const char *pt = "apple";로 선언하는 것이 좀 더 좋은 방법인것 같다. 문자열 수정을 하기 위해서는 어떻게 할까? 문자열 수정을 위해서는 배열을 사용해도 된다. 배열은 상수영역에 있는 "apple"을 가져와 복사를 하여 스택 영역에 둔다. 때문에 변경을 해도 아무..
아래와 같은 소스가 있다. int main(){ char arr[5]; scanf("%s", arr); printf("%s %d\n", arr, sizeof(arr)); return 0; } scanf()를 사용한 이 소스를 실행시켜 보면, '\0'을 제외하고 4자를 입력할 수 있다. 하지만, 사용자가 5자 이상을 입력했을 때, 프로그램이 크래시 되고만다. 반면, fgets()는 문자열의 최대 크기를 지정한다. int main(){ char arr[5]; fgets(arr, sizeof(arr), stdin); printf("%s %d\n", arr, sizeof(arr)); return 0; } 그렇기 때문에 아무리 많은 글의 문자열을 입력하더라도 에러를 막을 수 있다. 이를 위해서 scanf()를 가..
이 이유를 알기 위해서는 다음과 같은 소스를 실행해 볼 필요가 있다. int main(){ int arr[] = { 2, 4, 6, 8 }; printf("index = 0 > %d, ", arr[0]); printf("%d\n", *arr); printf("index = 2 > %d, ", arr[2]); printf("%d\n", *(arr + 2)); return 0; } 배열 변수는 첫 번째 항목에 대한 포인터로 사용할 수 있다. 그렇기 때문에 arr[2]는 *(arr + 2)로 표현이 된다. 즉, 첫번째 배열주소에서 int(4byte)만큼의 주소번지를 이동하여, 다음 값을 읽는다. 결론 : arr의 경우 첫 주소는 아무 값도 더하지 않는 0부터 시작하게 된다.
원래 main함수는 반환형이 정수형인 int이다. 반환값이 0이면 프로그램이 정상 종료되었을음 표시해주는 것이며, 0이 아닌 값을 반환하면 문제가 있음을 알려주게된다. 그러므로 main함수를 사용할 때는 반환값을 알지 못하는 float, double형과 같은 다른 형식의 반환형보다는 정수형인 int를 사용해서 반환하는 것이 좋다. 또한, void의 경우에는 아무런 값도 반환하지 않음을 컴퓨터에게 알려주어 return을 사용할 필요없이 사용할 수 있다.(return을 사용할 수 없는 것이 아니다. 사용할 경우에는 함수를 종료하기 위한 return;으로 사용가능하며, 반환값을 포함하지 않는다.)
객체지향 원리변하는 것을 캡슐화하라구현에 의존하기 보다는 인터페이스에 의존하도록 코딩하라각 클래스는 변경 요인이 오직 하나이어야한다.클래스는 행동과 기능에 관한 것이다. 디자인 원리 (SOLID) Single Responsibility Principle (SRP) 단일책임의 원리로 모든 객체는 하나의 책임을 가진다. Open Closed Principle (OCP) 수정에는 닫혀있고, 확장에는 열려있다. Liskov Substitution Principle (LSP) 자식 타입들은 부모타입들이 사용되는 곳에 대체될 수 있어야한다. 상속보다는 위임, 구성, 집합을 사용하면 소프트웨어는 더 유연하고, 유지보 수성, 확장성, 재사용성이 좋아진다. Interface segregation principle (IS..
worker사용 주의!!) worker는 DOM의 접근을 허용하지 않는다. 여러 worker들의 접근에 따른 문제 때문이다. postMessage는 API에 정의 되어있는 함수로 worker로 메시지를 보낸다. ( 문자열 뿐만 아닌 여러타입을... ) test.jswindow.onload = function(){ var worker = new Worker("worker.js"); worker.postMessage("web");worker.onmessage = function(event){var message = "당신은" + event.data + "개발자 입니다.";document.getElementById("output").innerHTML = message;};}; worker.jsonmessage..
localStorage 사용하여 로컬 저장. 저장 localStorage.setItem("key", "value"); 저장 localStorage["key"] = data; 배열로 저장 localStorage.setItem("key", JSON.stringify(myArray)); // JSON타입으로 바꾸면 String타입 출력 var data = localStorage.getItem("key"); 출력 var data = localStorage["key"]; 배열로 출력 var myArray = localStorage.getItem("key"); myArray = JSON.parse(myArray); 저장된 항목 수 구하기: localStorage.length;저장된 항목 지우기 : localStor..
- Total
- Today
- Yesterday