CS11 [객체지향]다형성은 어떻게 코드로 구현되는가? 런타임 다형성:상속을 통해 메서드 오버라이딩을 소스코드에 구현해놓고 컴파일 후 실행upcasting으로 자식 객체를 부모 객체 자료형에 넣으면 런타임에 동적 바인딩이 일어나서 다형성 실체화class Animal { void sound() { System.out.println("동물 소리"); }}class Dog extends Animal { @Override void sound() { System.out.println("멍멍"); } // 메서드 오버라이딩}class Cat extends Animal { @Override void sound() { System.out.println("야옹"); } // 메서드 오버라이딩}public class Main { publ.. 2025. 7. 9. 배열의 범위를 넘어서면 항상 segfault가 발생할까? int ary[10];ary[10] = 1; 이 코드는 항상 segfault를 발생시킬까?그렇다고 대답해도 절반만 맞고, 그렇지 않다고 대답해도 절반만 맞다. 일단 segfault의 정확한 정의를 정리할 필요가 있다.segfault는 segmentation fault의 준말로 잘못된 메모리 영역을 건드렸을 경우에 발생한다. 그렇다면 segmentation이란 무엇일까? 프로세스는 크게 데이터, 힙, 스택, 코드의 4가지 영역으로 나뉘는데 이 4가지 영역으로 나뉜 모양 자체를 segmentation이라고 하고(좀더 정확히는 권한에 관련되어 있다) 각각의 영역을 segment라고 부른다. segfault는 예를 들어 stack 영역에 있는 변수나 객체가 적절한 권한 없이 heap, data, code 등 .. 2025. 7. 8. [객체지향]조합, 위임이 상속을 대체하는가? 상속 → “이 객체는 이런 기능을 갖는다”조합 → “이 객체는 저 객체를 사용해서 일한다”위임 → “이 객체는 저 객체에게 일을 시킨다” 상속은 컴파일 시점에 부모와 자식의 관계가 결정되기 때문에 결합도가 높다. 조합과 위임을 통해 유연성을 높이고, 조합과 위임의 하드코딩으로 인해 발생되는 경직성을 해결하기 위해 의존성 주입이 도입되었다. 꼬리질문 1:상속은 곧 확장이기도 하다. 그리고 부모 클래스의 멤버 변수 및 메서드에 접근할 수 있다는 것이지 반드시 써야 되는 것도 아니다. 얼마든지 자식 클래스만의 멤버를 만들어서 자유롭게 확장할 수 있는데 왜 유연하지 못하다고 하는 것일까?꼬리답변 1:컴파일 타임 확장과 런타임 확장의 차이이다.컴파일 타임에 상속과 조합은 아래와 같이 결정된다:상속 → “이 객체는.. 2025. 6. 6. 형변환이란? 데이터를 바라보는 관점을 바꾸는 행위→ 똑같은 숫자 1이라도 int에 넣으면 정량적인 숫자 1을 의미하게 되고, bool에 넣으면 논리적 참을 의미하게 됨.→ 똑같은 숫자 65라도 int에 넣으면 정량적인 숫자 65를 의미하게 되고, char에 넣으면 대문자 A를 의미하게 됨. 기본 자료형에서의 형변환은 위의 정의만으로도 충분히 이해가 되지만 참조 자료형 사이의 형변환은 충분하지 못한 측면이 있다. 왜냐하면, 참조 자료형 사이의 형변환은 heap 영역에 할당된 인스턴스 자체의 크기를 바꾸는 게 아니라 stack 영역에 할당된 인스턴스의 참조에 관한 이야기이기 때문이다. 이러한 측면에서, 형변환을 참조 자료형에 국한하여 다시 정의하자면 아래와 같다:모호성의 범위를 조절하는 행위 upcasting: 구체적인.. 2025. 5. 28. 운영체제 기본 3 - CPU는 어떻게 컴퓨터를 제어하는가 지난번 시리즈에서 컴퓨터의 하드웨어는 크게 CPU, RAM, 보조 메모리, 입출력 장치 이렇게 4가지로 분류할 수 있다고 설명했다. 그 중 컴퓨터의 핵심이라고 볼 수 있는 부품은 CPU인데 이 장치가 사실상 컴퓨터를 제어한다고 볼 수 있다. 그렇다면 CPU는 어떻게 컴퓨터를 제어하는 것일까? 바로 인터럽트라는 시스템을 통해 제어하는데 오늘은 이 인터럽트에 대해서 알아보자. 1. 인터럽트란? 하드웨어나 소프트웨어가 아래의 2가지 이유로 인해 CPU에 알림을 보내는 행위 1) CPU가 이전에 시킨 작업이 끝났음 -> 그러니까 뭘 해야 될지 나에게 지금 당장 알려줘 2) 지금 당장 처리해야 할 중요한 연산 작업이 있음 -> 그러니까 이걸 지금 당장 처리해줘 참고로, 하드웨어가 일으키는 인터럽트는 그냥 인터럽트.. 2023. 7. 8. 가상화에 대하여 1. 가상화란? 하나의 실물 컴퓨팅 자원을 마치 여러 개인 것처럼 가상으로 쪼개 사용하거나, 여러 개의 실물 컴퓨팅 자원들을 묶어서 하나의 자원인 것처럼 사용하겠단 의미 하나의 실물 컴퓨팅 자원을 여러 개로 나눠 사용하는 예 → 각종 클라우드 서비스 여러 개의 실물 컴퓨팅 자원을 하나의 자원인 것처럼 사용하는 예 → 4기가짜리 프로그램을 깔려고 하는데 2기가짜리 하드가 2개 있네? 그러면 이걸 묶어서 사용 가상화는 기본적으로 실물 컴퓨팅 자원을 더 자유롭게 사용하기 위해 나온 개념이다. 그렇기 때문에 네트워크, OS, 하드디스크 등의 다양한 자원들을 가상화할 수 있고 개개의 가상화는 서로 독립적이다. 네트워크만 가상화하고 OS는 가상화하지 않을 수도 있고, OS를 가상화하고 하드디스크를 가상화하지 않을 .. 2023. 6. 29. 포트와 소켓 - 네트워크 네트워크에 연결된 모든 기기들을 node라고 부르고, 그 중에서도 IP주소가 할당된 것들은 특별히 Host라고 부른다. 이 Host 내부에서는 여러 개의 프로세스가 동시에 동작하는데 데이터를 주고받는 행위는 호스트 안에 있는 프로세스 레벨에서 이뤄진다. 프로세스는 쉽게 말해 실행 중인 프로그램이라고 생각하면 되는데 프로세스는 동시에 여러 개가 실행될 수 있다. 당장 우리가 매일 쓰는 스마트폰에서 유튜브 뮤직을 들으며 카톡을 할 수 있는 것도 이 때문이다. 그렇기 때문에 이 프로세스들을 구별해야 할 필요성이 생겼는데 그래서 나온 게 포트이다. 정리하자면 네트워크를 통해 데이터를 주고받는 프로세스를 호스트 컴퓨터가 식별하기 위해 호스트 내부적으로 프로세스에 할당하는 고유한 값을 포트라고 할 수 있다. 그렇다.. 2023. 6. 29. 운영체제 기본 2 - 컴퓨터 하드웨어 구조 운영 체제는 사용자와 하드웨어 간 매개 역할을 하는 소프트웨어다. 바꿔 말하면 우리가 컴퓨터 하드웨어와 소통을 할 수 있게 도와주는 역할을 하는 프로그램이라는 얘긴데, 그렇기 때문에 컴퓨터 하드웨어 시스템의 구조에 대해 이해해야 한다. 처음 만난 사람보다는 잘 아는 친구가 더 말이 잘 통하듯 하드웨어 시스템을 알면 운영 체제의 역할을 더 잘 이해할 수 있을 것이다. 컴퓨터 하드웨어 시스템은 크게 4가지 부분으로 나눌 수 있다. -> CPU, RAM, 보조메모리, 입출력장치 각각의 장치는 system bus라는 일종의 통로를 통해 서로 소통한다. 입력장치를 통해 사용자의 입력이 들어오면 CPU가 해당 입력을 해석하고 보조 메모리에서 필요한 데이터 뭉치를 가져와 RAM에 올린 다음 다시 CPU가 그 데이터 .. 2023. 6. 28. 운영체제 기본 1 - 운영체제란? 운영체제란? - 컴퓨터 하드웨어를 관리하는 프로그램 - 컴퓨터 사용자와 하드웨어 사이의 중개자 - 자원 배분, 메모리 관리, 보안 관리 등의 일을 맡음 이렇게만 설명하면 그냥 그런가보다 싶지 감은 잘 오지 않을 것이다. 이렇게 생각해 보자. 운영 체제는 정부가 하는 일과 비슷한 일을 한다. 정부가 없다고 상상해보자. 정부가 없는데 외국 군대가 쳐들어온다면 어떻게 될까? 군대가 없으므로, 우리가 직접 죽창이라도 들고 싸워야 한다. 정부가 없는데 억울한 일을 당하면 어떻게 해야 할까? 법원이 없으므로, 우리가 망치를 들고 직접 응징해야 한다. 그 외 기타 수많은 행정 서비스, 복지 서비스 등등 모든 서비스가 올스탑될 것이다. 그렇다면 컴퓨터에 운영체제가 없다고 상상해보자. MS 워드에 글을 타이핑하는 것만 .. 2023. 6. 27. TCP/IP 프로토콜 간단 요약정리 1. 프로토콜이란? TCP/IP 프로토콜에서 프로토콜은 "통신 규약"을 의미한다. 수많은 자동차가 효율적으로 통행하기 위해 "신호 체계"가 필요하듯, 컴퓨터와 컴퓨터가 효율적으로 통신하기 위해서는 "통신 규약"이 필요하다. 이런 통신 규약 중에서도 TCP 프로토콜과 IP 프로토콜이 가장 널리 쓰이기 때문에 둘을 묶어서 TCP/IP 프로토콜이라고 부른다. 2. TCP/IP의 토대 - 패킷통신 데이터를 pakcet이라고 하는 작은 단위로 나눠서 전송하는 방식이다. 그냥 보내면 되지 왜 번거롭게 잘게 쪼개는 것일까? 작은 단위로 나누지 않으면 크기가 큰 데이터의 경우 네트워크의 대역폭을 너무 많이 차지하게 되어 네트워크의 흐름을 방해하게 된다. 마치 좁은 도로에 대형 트럭이 나타나면 교통정체가 발생하는 것과 .. 2023. 6. 25. 이전 1 2 다음