전체 글54 객체 지향 설계의 5가지 원칙 (SOLID) 객체 지향 프로그래밍을 설계 즉, OOP 설계를 할 때에 유의해야 하는 5가지 원칙이 있다. 그전에 객체 지향 프로그래밍이 무엇인지부터 알아보자. 위키백과에서는 객체 지향 프로그래밍을 다음과 같이 정의한다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 자 여기에서 유연하고 '변경이 용이하다'는 말은 자바를 배운 사람이면 모두 아는 객체 지향 언어의 특징이다. '다형성 Polymorphism'. 같은 타입이지만 실행 결과가 .. 2021. 5. 26. 1일 1페이지, 세상에서 가장 짧은 교양 수업 365 내가 이 책을 산건 아마도 내가 교양 지식이 부족하다고 생각해서였겠지. 그리고 재밌어 보였다. 다양한 주제를 딱 1페이지에 서술해놓아서 읽는데 부담이 없을 것 같았다. 책의 의도대로 내가 매일 1페이지를 읽지 않았다. 7페이지 즉, 일주일치를 한 번에 읽었다. 그렇게 해서 약 50여 일간 매일 읽었다. 처음엔 꾸준히 무언가 하겠다는 루틴을 가지고 싶어서였고, 그다음에는 뒷 내용이 궁금해서 읽었다. 이 책의 장점은 명확하다. 1페이지라는 부담 없는 분량으로 흥미를 끈다. 더 궁금하면 검색해서 찾아볼 정도로. 그리고 역사는 역사대로 문학은 문학대로 내용이 계속해서 이어진다. 챕터 구분이 있는 듯 하지만 전체적으로 이어지는 느낌이 든다. 우선 처음부터 끝까지 다 읽긴 했지만 다시 이 책을 읽는다면 7개의 섹션.. 2021. 5. 15. Java Garbage Collection Garbage Collection(GC)은 쉽게 말해 Garbage Collector가 더 이상 참조되지 않는 객체를 지우는 행위를 뜻한다. 사실 학교에서 여기까지 배웠다. C언어와의 차이점으로 잠깐 언급하고 지나가는 정도로만 알고 있었는데, 찾아서 알아가다 보니 어마 무시한 과정들이 뒤에 숨어있었다. stop-the-world GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 스레드를 제외한 모든 스레드는 작업을 멈춘다. Weak Generational Hypothesis Garbage Collector는 두 가지 전제조건 아래서 만들어졌다. 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다. 오래된 객체에서 젊은.. 2021. 5. 15. Java 프로그램 실행 과정과 메모리 구조 JVM? Java 프로그램이 어떻게 동작하는지 알려면 JVM을 우선 알아야 한다. Java Virtual Machine의 줄임말로 운영체제별로 자바 프로그램을 별도로 개발하지 않아도 여러 운영체제에서 동일한 실행 결과가 나오도록 설계된 가상의 운영체제이다. Java 클래스 파일을 로드하고 바이트 코드를 해석하며, 메모리 자원을 할당하고 정보를 처리하는 프로그램이다. "Write Once, Run Anywhere" Java 프로그램 실행 과정 JVM이 운영체제로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. 자바 소스코드(*.java)를 자바 컴파일러(javac.exe)로 컴파일하면 바이트 코드 파일(*.class)을 생성된다. Class Loader를 통해 class파일들을 JVM으로 동적으로 로딩.. 2021. 5. 14. [Python] 검색 - KMP 알고리즘 접두사 접미사 개념을 활용하여 모든 경우를 비교하지 않고 일치하는 문자열을 찾는 알고리즘이다. 다음과 같이 문자열이 주어졌다고 하자. text='ABCBABACAABACCA' pattern='ABACAABA' 주어진 패턴의 접두사와 접미사를 비교하면 아래 표와 같다고 할 수 있다. 길이 패턴 최대 일치 길이 1 A 0 2 AB 0 3 ABA 1 4 ABAC 0 5 ABACA 1 6 ABACAA 1 7 ABACAAB 2 8 ABACAABA 3 접두사와 접미사가 일치하는 만큼 인덱스를 확인하지 않고 넘어갈 수 있기 때문에 효율성이 좋아진다고 할 수 있다. def makeTable(pattern): patternSize = len(pattern) table = [0] * patternSize j = 0 for.. 2021. 4. 1. [Python] 블록 이동하기 (2020 KAKAO BLIND RECRUITMENT 기출) Programmers (블록 이동하기) 문제 설명 로봇개발자 "무지"는 한 달 앞으로 다가온 "카카오배 로봇경진대회"에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 "무지"는 "0"과 "1"로 이루어진 N x N 크기의 지도에서 2 x 1 크기인 로봇을 움직여 (N, N) 위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌표를 (1, 1)로 하며 지도 내에 표시된 숫자 "0"은 빈칸을 "1"은 벽을 나타냅니다. 로봇은 벽이 있는 칸 또는 지도 밖으로는 이동할 수 없습니다. 로봇은 처음에 아래 그림과 같이 좌표 (1, 1) 위치에서 가로방향으로 놓여있는 상태로 시작하며, 앞뒤 구분없이 움직일 수 있습니다. 로봇이 움직일 .. 2021. 3. 22. 이전 1 2 3 4 ··· 9 다음