본문 바로가기

전체보기42

[C 언어 기초] 포인터와 배열 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 포인터 산술 포인터는 배열의 원소를 가리킬 수 있다. int a[10]; int *p = &a[0]; 위 코드를 통해 포인터 변수 p로 a[0]에 접근할 수 있다. 예를 들어, a[0]에 5라는 값을 저장하고 싶으면 다음과 같이 해주면 된다. *p = 5; p를 a의 첫번째 원소를 가리키게 만드는건 그렇게 대단한 일은 아니다. 하지만 p에 포인터 산술(pointer arithmetic)을 사용하게 되면 a의 다른 원소에 접근이 가능하다. C는 세 가지의 포인터 산술을 지원한다. 포인터에.. 2023. 12. 13.
[C 언어 기초] 포인터 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 포인터 변수 대부분의 최신 컴퓨터들에서 주 메모리는 바이트(byte) 단위, 즉 8비트짜리 정보를 저장할 수 있는 단위로 나뉜다. 각 바이트에는 고유한 주소(address)를 가지므로, 모든 바이트들은 서로 이 주소를 통해 메모리 내에서 구분한다. 프로그램의 모든 변수들은 메모리에서 한 개 이상의 바이트를 차지한다. 첫번째 바이트의 주소를 변수의 주소라고 부른다. i 변수가 주소 0과 1을 갖는 바이트를 차지한다면 i의 주소는 0이다. 여기서 등장하는 개념이 바로 포인터다. 주소를 숫자.. 2023. 12. 13.
[C 언어 기초] 선택문 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 논리표현식C에서는 i < j 와 같은 비교식의 결과값은 1 혹은 0인 정수다. 1이면 참을 의미하고, 0은 거짓을 의미한다. 관계 연산자기호의미 (왼쪽이 오른쪽보다)크다; 초과=크거나 같다; 이상 동등 연산자기호의미 (왼쪽이 오른쪽과)==같다!=같지 않다 논리 연산자기호의미!부정&&논리곱||논리합if 문if문은 프로그램이 표현식의 값을 사용하여 두 가지 선택지 중 하나를 고르게 만든다.if (expression) statement if문이 실행되면 괄호 안의 표현식이 평가된다. 만약 표현.. 2023. 12. 13.
[C 언어 기초] 표현식 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. C언어의 표현식 종류 산술 연산자 단항 이항 덧셈류 곱셈류 + (단항 덧셈) + (덧셈) * (곱셈) - (단항 뺄셈) - (뺄셈) / (나눗셈) % (나머지) ※ [구현정의행동] /이나 % 연산자를 음수 피연산자와 함께 사용하게 되면 결과를 표현해주기 매우 힘들다. C89 표준에 의하면 두 개의 피연산자 중 하나라도 음수면 나눗셈의 결과값은 반올림 되거나 반내림 될 수 있다고 되어있다. 예를 들면 -9 / 7의 값이 -1이거나 -2가 될 수 있다. 만약 i나 j가 음수라면 C89에서 .. 2023. 12. 13.
[C 언어 기초] 서식 입출력 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. printf 함수 printf 함수는 서식 문자열 (format string) 이라고 불리는 문자열을 문자열의 특정 부분에 추가된 값과 함께 출력하는 기능을 수행하도록 만들어졌다. (The printf function is designed to display the contents of a string, known as the format string, with values possibly inserted at specified points in the string.) printf(st.. 2023. 12. 12.
[C 언어 기초] C 프로그램의 구조 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. #include int main(void) { printf("To C, or not to C: that is the question.\n"); return 0; } #include 는 C의 표준 입출력 라이브러리에 대한 정보를 첨가(include)하기 위해 필요한 줄이다. 프로그램에서 사실상 실행되는 코드는 main 에 존재하고, 말그대로 대표(main) 프로그램을 의미한다. main 안에 유일한 명령어는 원하는 자료를 출력해주는 printf 라는 함수이다. printf는 표준 입출력 .. 2023. 12. 12.
[C 언어 기초] C 언어 개요 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. C의 유래 C는 1970년대 초 벨 랩에서 개발된 광범위하게 사용되는 프로그래밍 언어 C는 UNIX 운영체제의 산물이다. UNIX는 어셈블리어로 제작되었는데, 어셈블리어로 제작된 언어들은 디버깅을 하거나 성능을 업그레이드할 때 매우 힘들다는 특징을 갖고 있었다. 이러한 단점 때문에 켄 톰슨(UNIX의 개발자)은 좀 더 고급 언어가 필요하다고 생각했고, B 언어를 제작했다. 후에 데니스 리치(K&R 라고도 부르는 The C Programming language 의 저자)가 UNIX 프로젝.. 2023. 12. 12.
[Java Spring 개발] 테스트코드 작성 패캠 강의를 보며 일단 따라쳤지만, 제대로 이해하지 않으면 나중에 이상하게 사용할 것 같아 정리 요즘 단위테스트는 given-when-then 패턴으로 작성하는 추세이다 (참고) given : 어떤 데이터가 준비되었을 때 when : 어떤 함수를 실행하면 then : 어떤 결과가 나와야 한다 // TodoServiceTest.java @Test void add() { when(this.todoRepository.save(any(TodoEntity.class))) .then(AdditionalAnswers.returnsFirstArg()); TodoRequest expected = new TodoRequest(); expected.setTitle("Test Title"); TodoEntity actual .. 2023. 6. 15.
[Java Spring 오류] Could not find org.springframework.boot:spring-boot-starter-data-rest:. Required by: project : 패캠 강의를 들으며 세팅하던 중 오류가 났다. Could not find org.springframework.boot:spring-boot-starter-data-rest:. Required by: project : 넘겨서 듣다보니 plugins에 누락된 부분이 있었다 ㅎㅎ plugins { id 'org.springframework.boot' version '2.4.2' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } 2023. 6. 14.
[Kotlin 기본] 반복문 활용하기 Kotlin의 for문을 사용해보았다. 문제 출처: https://ccpro.tistory.com/10 반복문 연습하기 좋은 문제(1~10) 반복문을 연습하는 데 괜찮은 문제인 것 같다. 문제 1) /* Q1. */ #include int main(void) { int i; for(i=1; i 2020. 8. 11.
[Kotlin 기본] Kotlin의 자료형과 변수 (1) [EdWith 코틀린 강좌] Kotlin의 변수 선언과 참조형 자료형을 공부했다. Kotlin의 변수형은 두 가지이다. - val (value) : 불변형 변수. java의 final처럼 추후에 변경이 불가하다. - var (variable) : 가변형 변수. Kotlin에서 변수를 선언할 때는 다음과 같이 선언한다. var username: String var count = 3 var number: String = "010-xxxx-xxxx" 1. 변수형 변수명: 자료형 2. 변수형 변수명 = 값 3. 변수형 변수명: 자료형 = 값 1번처럼 값을 초기화하지 않으면 사용할 수 없다. Kotlin은 2번처럼 자료형을 선언하지 않더라도 컴파일러가 값을 추론하여 자료형을 결정한다. = 추론 타입을 확인하려면 .. 2020. 5. 28.
[Kotlin 기본] Kotlin Decompile & Program Arguments 확인 [Edwith Kotlin 강의] Kotlin의 Compile 과정을 추적하고, main 함수에 argument를 입력해보았다. Kotlin 파일인 .kt 확장자 파일이 Compile되는 과정을 추적해보았다. 1. Kotlin 코드에서 상단 바의 Tools를 클릭한다. 2. Kotlin - Show Kotlin Bytecode를 클릭한다. 3. Kotlin Bytecode 창에서 Decompile 버튼을 클릭한다. println("Hello Kotlin!") 위의 코드를 Decompile 한 파일은 다음과 같다. java코드로 작성되어 System.out.println() 으로 출력되는 것을 확인할 수 있다. 굉장히 신기하다. Kotlin에서 main 함수는 두 가지이다. 매개변수가 없거나, 있거나. m.. 2020. 5. 27.
[Kotlin 기본] Kotlin의 개념과 Hello Kotlin 출력하기 Kotlin 공부를 시작했다. 네이버의 EdWith 기반으로 공부를 진행한다. [EdWith Kotlin 강의] 코틀린은 다음과 같은 특장점을 가지고 있다. 사용 목적 - 풀스택 웹개발 - 안드로이드 개발 - 다양한 플랫폼 특징 - IDE로 유명한 JetBrains (InteliJ) - 코드 간결, 다재다능, 호환성 - 세미콜론은 옵션 - 안드로이드 공식언어 - Nullable 변수 사용시 ?를 붙임, Null Exception 최대한 막아줌 = NPE에서 자유롭다 사용가능 플랫폼 - JVM - Java Script - Native = ARM이나 x86 환경에서 실행할 수 있음 = ios, macOS, Android, Windows, Linux, WebAssembly 장점 - 자료형 오류를 미리 잡을수 .. 2020. 5. 26.
[Java 개발] Chrome Console과 Json to CSV 파싱을 이용한 플레이스토어 리뷰 저장 전공 과제를 위해 플레이스토어의 리뷰를 저장해야 했다. 리뷰 통계 및 분석을 위해 많은 양의 리뷰가 필요했다. 빠른 작업을 위해 파이썬 크롤링을 알아보다, Chrome 개발자도구의 Console을 사용해 크롤링 하는 방법을 발견했다. Chrome을 통해 데이터를 크롤링 한 후에는, Json 파일로 저장하고 Java로 다시 CSV로 변환했다. 크롤링부터 알아보자. 원문 출처 : https://zzsza.github.io/development/2019/03/12/crawling-in-developer-tools-console/ 크롬 개발자 도구 Console에서 Google Play Review 크롤링하기 Crawling Google Play App Review with Developer Tools 개발자 .. 2020. 5. 17.
[Unity VR 오류] Unity SteamVR 빌드 시 컨트롤러 작동 안 됨 외주로 VR 안전 시뮬레이터 프로젝트를 진행했다. Valve의 Vive를 통해 개발했는데, 오브젝트를 잡는 기능을 구현하려 Personal Controller Binding을 진행했다. Trigger에 Use As Button형식으로 추가했다. 그러나, 유니티 에디터 상에선 작동이 잘 되었으나, 빌드 파일로 실행 시 컨트롤러 입력이 작동하지 않는 문제점을 발견했다. 이는 빌드 시 Personal Binding Setting이 함께 빌드되지 않아서이다. 당시에는 시간이 너무 지체돼 즉석에서 Binding을 진행하고 시연했다. 그러나 구글링을 통해 해답을 발견했다. 추후에 기회가 되면 이 방법을 사용하여 Binding을 정상적으로 적용해야겠다. 2020. 5. 15.
[알고리즘] Reverse 알고리즘 채용 공고를 보다가 다음과 같은 예제를 발견했다. String을 뒤집어서 출력하는 Reverse 함수 알고리즘이었다. 평소 C#에서는 string을 char array로 만들어서 Array.Reverse() 함수를 사용했다. 그러나 예전에 봤던 역 반복문을 사용해서 구현하면 쉬울 것으로 생각해 직접 구현해 보았다. static void Main(string[] args) { string value = Console.ReadLine(); Reverse(value); } static void Reverse(string value) { string result = ""; for (int i = value.Length-1; i >= 0; i--) { result += value[i]; } Console.Writ.. 2020. 4. 30.
[Unity 오류] OnTriggerEnter 와 RigidBody Collider를 사용해 Trigger 이벤트를 받아오는 과정에서 Trigger 충돌이 발생하지 않아 애를 먹었다. 이는 둘 중 한쪽이라도 RigidBody가 없어 일어났다. 한 쪽에 RigidBody 컴포넌트를 추가해 해결했다. 아주 기초적인 문제에서 헤매며 반성하는 계기가 되었다. 2020. 4. 20.
[Unity 오류] SerializedObjectNotCreatableException : Object at index 0 is null 개발 중 다음 에러가 발생했다. SerializedObjectNotCreatableException : Object at index 0 is null 오류이다. 구글링 결과 Inspector창이 여러개일 경우에 발생한다고 한다. 콘솔창을 닫았다가 몇 초 후에 열면 사라진다고 하지만, 작동하지 않아 유니티 에디터 자체를 끄니 정상적으로 사라졌다. 2020. 4. 20.
[Unity 2D 개발] 카메라와 Raycast를 사용해 화면 터치하기 Project_Bulb는 모바일 퍼즐게임으로 구상했기 때문에, 터치를 통해 오브젝트를 선택하도록 했다. 단, 오브젝트가 버튼이 아니기 때문에 Raycast를 사용해 구현했다. // 클릭한 위치에 Ray 쏘기 var ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit Hit; if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out Hit)) { //Ray에 닿은 GameObject가 Bulb일 경우, CheckWhite() 메소드 호출 if (Hit.transform.gameObject.TryGetComponent(out Bulb bulb)) { bulb.CheckWhite();.. 2020. 4. 20.
[Unity 2D 개발] 상속과 오버라이딩을 이용한 Sprite 변경 Project_Bulb 는 Unity와 C#을 사용해 개발한다. 특정 행동으로 Sprite가 변경되는 Bulb 클래스와 그를 상속하는 DoorBulb 클래스가 있다. 두 클래스는 다른 Sprite를 사용하기 때문에 Sprite를 변경하는 함수를 구분해야 할 필요가 있다. Bulb의 Sprite 변경 함수는 다음과 같다. public void ChangeBulbImage() { gameObject.GetComponentInChildren().sprite = gameManager.bulbSprites[(int)colorState]; } Bulb의 Sprite 들을 GameManager 스크립트에 Sprite 배열로 저장했다. GameManager의 인스턴스인 gameManager의 배열에서 Sprite를 가.. 2020. 4. 20.
[안드로이드 개발] 화면 크기 받아오기 (좌,우 터치 인식하기) 자고10니? 를 개발하며 화면을 세로로 나누고 좌, 우 터치를 인식해야 했다. Java를 사용했다. 화면 크기를 받아오는 코드는 다음과 같다. Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); onTouch 이벤트의 매개변수인 event 객체를 사용하면 터치한 위치의 좌표값을 알 수 있다. @Override public boolean onTouch(View v, MotionEvent event) { float x = event.getX(); return false; } width를 반으로 나누고, x와 비교하여 크거나 작음으로 좌, 우.. 2020. 4. 3.