전체 글 37

객체지향을 사용하는 이유 (절차지향과 비교)

객체지향이 무엇인가?객체지향은 데이터를 객체로 만들어 구조화된 프로그래밍 기술입니다.그렇다면 왜 객체를 굳이 사용해서 프로그래밍 해야할까요? 절차지향으로 구현예를 들어 학생 정보를 관리하는 프로그램을 만든다고 생각해봅시다.그러면 C 언어를 사용해 구현한다면 다음과 같을것입니다.#include // 구조체 정의struct Student { char name[50]; int age; float score;};// 함수 정의void displayStudent(struct Student s) { printf("Name: %s\n", s.name); printf("Age: %d\n", s.age); printf("Score: %.2f\n", s.score);}int main() {..

Java 2024.04.28

[입출력] Java FastIO For Competitive programming

입력보통 Java에서 입력을 받을때 Scanner, BufferedReader를 사용한다.그러나 프로그래밍 대회용에서 쓰는 좀더 빠른 입력 방법이 있다.DataInputStream 을 사용해 입력을 조금 더 빨리 받는거다. 백준같은 문제를 풀때는 BufferedReader 를 주로 사용해야하는데,FastReader 클래스는 Scanner 같이 nextInt, nextDouble 처럼 입력을 받아야한다. 실제로 BufferedReader로 236ms가 걸렸던 문제가 112ms까지 줄어들었다.그리고 해당 문제 Java 기준 가장 빠른 성능을 보여주기도 했다. 다만 클래스 정의가 굉장히 길어서 코테를 풀때는 BufferedReader를 계속 사용하면 될듯하고순위 욕심이 생긴다면 한번 ..

Algorithm 2024.04.19

[소설] 동급생

어느날 뉴스를 보니까 요즘 청소년의 숏폼 중독이 늘어난댄다. 근데 나 역시 유튜브를 보는 시간이 점점 늘어나고 심지어 어떨때는 보면서 재밌지 않아도 계속 보게된다. 그래서 다시 책을 읽기로 했다. 이 책을 읽기전에 '거짓말, 딱 한 개만 더' 라는 소설을 읽었다. 한 100페이지까지 읽었는데 여러개 에피소드를 합쳐놓은 단편집이어서 딱 2 에피소드까지만 읽었다. 에피소드당 50페이지 정도 밖에 안되니까 흐름이 끊겨서 아쉬웠다. 그래서 다시 고른 책이 '동급생'이다. 나는 히가시노 게이고의 추리물을 좋아한다. 구성은 추리소설인데 청소년 성장, 공포, 감동, 미스테리 처럼 다양한 분야가 섞여있다. 그래서 난 분명 추리소설을 읽었는데 다 읽고나면 왠지 재밌게 속았다는 느낌이 든다. 이번 책도 그랬다. 주인공 소..

독서 2024.04.08

GC는 어떻게 이루어지는가?

GC? GC는 Garbage Collector다. garbage = 참조되지 않는 객체 garbage를 청소함으로써 메모리 누수를 막고 메모리를 효율적으로 관리. Garbage Collector는 Garbage Collection을 수행하는것이다. Java는 C와 달리 메모리 관리를 직접하지 않는다. JVM의 GC에서 대신 필요하지 않는 메모리를 정리해준다. 어떻게 설계되었는가? 간단히 생각해서 중간에 사용되지 않는 메모리를 체크해서 해제해주면 될것이다. 그러나 이 과정은 굉장히 자원을 많이 사용하는 비싼 작업이다. 그래서 GC는 최대한 적게하는것이 가장 중요하다. 객체들의 생명주기를 조사해보니 대부분의 객체들은 생명주기가 짧았다. 즉 대부분의 객체들이 금방 생성되고 사라지는것이다. 오래 살아남는 객체들..

Java 2024.01.29

객체 지향이란?

객체 지향?객체란 현실 세계의 유무형의 사물들을 표현하기 위한 자료형입니다.이때 객체는 3가지 요소를 갖습니다.속성값, 액션(메서드), 관계. 자동차를 객체로 따지면 다음과 같을것입니다.속성값 : 모델명, 색상, 연비, 마력 등메서드 : 시동걸기, 전진하기, 후진하기, 방향 전환하기 등관계 : 다른 브랜드 자동차, 오토바이 등 여기서 가장 눈여겨 보아야할점은 관계입니다.객체는 다른 객체들과의 긴밀한 연결성을 갖고 있습니다. 예를들어 현대에서 여러가지 자동차, 오토바이를 생산한다고 했을때여러 객체들관의 관계를 명확히 설계해야고도화된 설비와 생산이 가능해질 것입니다.그리고 우리는 이러한 객체들을 이용한 설계를 객체 지향이라고합니다. 객체 지향을 왜 써야할까?간단하게 비유를 통해 객체 지향을 알아봤지만 뭔가 ..

Java 2024.01.17

[소설] 방황하는 칼날

법은 왜 존재할까? 소설에서는 이 화두에 끊임없이 의문을 던진다. 한 마을에 어떤 사람이 살인을 저질렀다. 우리는 그 사람을 어떻게 해야할까? 당연히 처벌해야할것이다. (처벌하지 않으면 살인을 막을 수 없다.) 그리고 그 처벌은 일관성을 가지고 있어야한다. 누구는 더 처벌하고 누구는 덜 처벌하면 안되기 때문이다. 우리는 그 일관성을 법이라고 한다. 법전에 이렇게 쓸것이다. '살인을 저지른자 처벌한다.' 그리고 추가적인 디테일에 따라 어떻게 처벌할건지 상세한 부분을 기술한다. (계획살인인지, 얼마나 잔혹했는지, 가해자가 몇살인지, 동기가 무엇이었는지, 가해자의 태도가 어땠는지 등등) 처벌을 결정할 단계다. 시대에 따라 다르겠지만 대부분의 사람들은 폭력은 안된다고 한다. 그래서 우리는 그 처벌을 사회로부터의..

독서 2024.01.12

[소설] 백야행 1,2

히가시노 게이고의 무수히 많은 작품중 가장 수작이라는 평을 듣는 소설이다. 소설의 전체적인 느낌은 굉장히 어둡다. 기리하라 료지와 가라사와 유키호라는 두 사람이 어린시절부터 엮이며 시간순서에 따라 소설이 진행된다. 사실 처음에는 많이 당황스러웠다. 일단 등장인물이 굉장히 많다. 이름도 일본어이고(일본소설이니까) 심지어 비슷비슷한 느낌도 줬다. 책도 1천 페이지에 달해서 꼼꼼히 읽으면 완독하지 못할거같았다. 그래서 내 선택은 외우며 꼼꼼히 보기보단 훑어보면서 읽었다. 대략적으로 6개의 챕터가 있었던거같다. 초등학생 시절 / 고등학생 시절 / 대학생 시절 / 20대~30대 (소프트웨어 회사, 전자제품 회사, 유키호의 첫 결혼) / 탐정사무소 / 형사의 추격 충격적인건 챕터마다 새로운 등장인물이 나와 헷갈리는..

독서 2024.01.09

[운영체제와 정보기술의 원리] 10장 웹캐싱

웹캐싱 웹캐싱은 웹서버의 캐시서버로 웹서버의 부하를 줄여주기위해 사용한다. 웹서버에 요청이 많아질수록 네트워크의 병목현상이 발생한다. 이러한 병목현상을 없애주기 위해 웹캐싱을 활용해 웹서버의 요청을 미리 캐싱해뒀다가 사용자에게 전달해주는 개념이다. 포워드 프록시 VS 리버스 프록시 위 그림에서 보면 웹캐싱을 위해 웹 브라우저는 프록시(proxy) 서버에 요청을 보낸다. 근데 이러한 프록시 서버의 책임은 사용자, 기업 어디에 있을까? 포워드 프록시 서버 : 클라이언트측이 프록시. 리버스 포록시 서버 : 서버측의 프록시. 포워드 프록시 클라이언트측에서 사용하는 프록시 서버다. (일반적인 프록시 서버라면 포워드 프록시.) 클라이언트가 서버에게 요청을 보낼때 포워드 프록시 서버에 요청을 먼저 보낸다. 그러면 프..

OS 2023.12.17