본문 바로가기

프로그래밍 언어27

저는 전략 패턴이 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 두 번째 주자 바로 전략 패턴입니다. 자랑은 아니지만, 사실 디자인 패턴이라는 걸 우테코 들어와서 처음 들어봤어요. 😂 그래서 전략 패턴 하나를 배우고 익히는데 시간이 오래 걸렸던 것 같아요. 그러면 전략 패턴을 제가 어떻게 이해하고, 정리하고, 적용했는지 알려드릴게요! 💪 피드백 환영입니다! 댓글 달아주세요 :) *** 디자인 패턴 *** 위키피디아에서 정의하는 디자인 패턴의 정의는 다음과 같아요. 디자인 패턴은 소프트웨어 설계에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 솔루션이다. 디자인 패턴은 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는 데에 쓰이는 형식화된 가장 좋은 관행이다. 가장 유명한 GoF.. 2021. 3. 13.
HashMap/HashSet의 원리 안녕하세요! 조엘입니다! 오늘은 HashMap과 HashSet이 어떻게 데이터를 저장하는지에 대해 한번 알아보아요! 💪 피드백 환영입니다! 댓글 달아주세요 :) *** HashMap *** HashMap은 Map 인터페이스를 구현한 컬렉션이에요. Map 인터페이스는 Key Object와 Value Object를 같이 저장하는 데이터 구조예요. Key Object를 기반으로 데이터를 저장하고, 접근하기 때문에 Key Object는 고유해야 해요. 따라서 Key Object는 중복해서 저장할 수 없어요. 또한 저장 순서와 출력 순서를 보장하지 않는 데이터 구조라고 알려져 있어요. *** HashSet *** HashSet은 Set 인터페이스를 구현한 컬렉션이에요. HashSet은 내부적으로 HashMap으로.. 2021. 3. 13.
저는 객체 지향이 처음이라니까요? 안녕하세요! 조엘입니다! "처음이라니까요" 시리즈 첫 주자 바로 객체 지향입니다. 솔직히 말하면, 객체 지향이랑은 초면은 아닙니다. 분명히 학교에서 배우긴 했어요. 클래스는 뭐다, 붕어빵 붕어빵 틀, 다형성, 캡슐화 등등... (학교 커리큘럼이 이상해져서 정말 맛만 보고 끝났지만 😒) 근데 막상 객체 지향에서 중요한 건 이런 용어들이 아니더라고요. 객체 지향에서 뭐가 중요한지 하나씩 알아봅시다 :) 틀린 내용이 있을 수 있습니다! 알려주세요! 댓글 환영합니다 😁 *** 정의 *** 기존 학교 과제나 알고리즘 테스트에서 작성한 코드들을 생각해보면, 데이터에 필요한 절차를 거쳐 원하는 결과로 가공되도록 코드를 작성했어요. 지금까지 제가 이러한 코딩 방식을 가지고 불편해하지 않았던 이유는 한 번 짜고 평생 볼.. 2021. 2. 22.
Java Code Conventions 우아한테크코스 1차에 합격했다! 이제 3주 동안의 프리코스를 거칠 텐데, 그전에 자바 코드 컨벤션을 공부해보도록 한다. 몸이 너무 안 좋아서 글을 읽는 게 도저히 안 되더라ㅜㅜㅜ 이미 잘 정리해주신 선배님들의 글을 참조하면서, 블로그에 포스팅하며 공부하기로 해본다. 미리 얘기하지만, 거의 베끼다시피 한 포스팅이다. 개인 공부를 위해 남긴다! 참조한 포스팅 : myeonguni.tistory.com/1596 [코딩규칙] 자바 코딩 규칙(Java Code Conventions) [코딩 규칙] 자바코딩 규칙(Java Code Conventions) 자바 프로그래밍 언어 코딩 규칙 원문 : Oracle / Code Conventions for JavaTM Programming Language / 1999-4-2.. 2020. 11. 24.
행렬 곱셈 최적화 2편 안녕하세요 조엘입니다! 프로젝트로 진행한 행렬곱셈 최적화에 대한 포스팅을 진행하도록 하겠습니다. 소스코드는 https://github.com/joelonsw/Matrix-Multiplication-Multithreading에서 확인하실 수 있습니다! DNS알고리즘을 통해 병렬처리를 진행했지만, multi 함수는 KIJ 방식 그대로여서 LLC miss rate가 개선되지 못했습니다. 이를 개선하고자 Tiling 방법을 도입했습니다. 매트릭스의 메모리에 접근할 때, 왼쪽과 같이 탐색하게 되면, 매트릭스의 사이즈가 캐시의 사이즈보다 큰 경우, 매트릭스 탐색 후 다시 매트릭스의 첫요소에 접근할 때 캐시에 남아있지 않게 됩니다. 이를 방지하고자 Tiling 방법을 도입했는데, 이는 캐시에 남아있을 때 해당 배열에.. 2020. 7. 23.
행렬 곱셈 최적화 1편 안녕하세요 조엘입니다! 프로젝트로 진행한 행렬곱셈 최적화에 대한 포스팅을 진행하도록 하겠습니다. 소스코드는 https://github.com/joelonsw/Matrix-Multiplication-Multithreading에서 확인하실 수 있습니다! 저는 총 4가지 단계를 거쳐 최적화를 진행했습니다. 1.인덱싱 순서를 바꾸어 캐시 hit ratio을 증가시켰습니다. 2.멀티 쓰레딩을 통해 병렬처리를 진행하였습니다. 3.타일링 기법을 통해 캐시 hit ratio를 증가시켰습니다. 4.SIMD를 통해 한번에 많은 데이터를 처리할 수 있게 하였습니다. 실험은 다음과 같은 환경에서 진행했습니다. 모든 소스코드는 C++로 작성을 했고, g++ version 7.5.0을 사용했습니다. 컴파일 옵션은 최적화 옵션을 .. 2020. 7. 23.
C언어 복습 <part4> 안녕하세요. 파피몬입니다. 이번 겨울방학에 최호성 선생님의 "독하게 시작하는 C프로그래밍" 책을 유튜브 강의와 함께 공부하였습니다. 강의를 들은 내용을 종이에 정리하였고, 이 중 중요하다고 판단한 내용을 포스팅 하도록 하겠습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 이번 Part4에서는, 11단원. 메모리와 포인터에 대해서 복습해봅니다. 내용이 많아 정리는 PDF로 대신하고, 자주 쓰는 함수에 대해서 정리하였습니다. 1. 동적 할당 함수 및 멤버 초기화 void *malloc(size_t size); // 인자 : size == 할당 받을 메모리 바이트 단위 크기 // 반환값 : 힙 영역에 할당된 메모리 덩어리 중 첫 번째 .. 2020. 3. 24.
C++ 5단원 복습! (2편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 5단원에서는 연산자 다중정의에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 5. 연산자 다중정의 6. 배열 연산자를 다루기 전, const가 지정하는 대상이 무엇인지 정확히 인지할 필요가 있다. ** http://egloos.zum.com/chideout/v/4158795 정리가 잘 되어 있는 이 포스팅을 통해 공부하였다. ** const class_name operator+( const class_name&) const { } 라는 메소드가 있다고 가정하자... 2020. 3. 22.
C++ 5단원 복습! (1편) 안녕하세요. 파피몬입니다. 이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!! 5단원에서는 연산자 다중정의에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다. Chapter 5. 연산자 다중정의 1. C++에서는 연산자의 재정의 / 다중정의를 지원한다. 연산자 다중정의로 사용자는 직관적인 class 사용이 가능해진다. 그렇기에! 기본 연산은 제작자가 아주 잘, 실패 없이 만들어 놔야한다! ** 논리 연산자 ( ! , && , || 등 ) 는 절대 다중 정의하면 안 된다! 심각한 논리적 오류로 이어짐 ** 산술 연산자, 대입 연산자, 관계 연산자(1편), 배.. 2020. 3. 22.
반응형