CS 지식
인터페이스와 추상 클래스는 무엇이고 공통점과 차이점은 무엇인가? 공통점 인터페이스와 추상 클래스는 객체지향의 프로그래밍 언어에서 사용되는 클래스의 종류이다. 둘 다 메서드의 선언만 있고 구현 내용이 없는 클래스 이기 때문에 단독으로 객체를 생성할 수 없다. 상속받은 객체를 생성할 수 있으며 결국 자식 클래스가 무언가 반드시 구현하도록 위임해야 할 때 사용해한다. 차이점 사용 목적에서의 차이 - 추상 클래스는 공통적 기능을 하는 클래스들의 추상화이다. 이 때문에 여러 클래스들의 공통점을 찾아 추상화시켜 사용하는 것이 개발상 이득일 때 추상 클래스를 구현하여 사용한다. - 인터페이스는 구현하고자 하는 클래스들에 대해 특정 메서드가 반드시 존재하도록 강제한다. 따라서 인터페이스를 통해 구현 객체가 같은 동작을..
HTTP 프로토콜은 비연결성(Connectionless)과(Connectionless) 비상태성(Stateless)이라는 특징이 있다. Connectionless 클라이언트가 서버에 요청을 하고 서버가 클라이언트에게 응답을 보내면 접속을 끊는 특징이 있다. Stateless 통신이 끝나면 상태 정보를 유지하지 않는 특징이 있다. 비연결성이라는 특성 덕분에 통신 연결을 유지하지 않아 리소스 낭비가 줄어드는 것이 큰 장점이지만, 통신할 때마다 클라이언 트가 인증을 새로 해야 하는 단점이 있다. ex) 쇼핑몰 웹사이트에 최초 로그인해도 페이지를 이동할 때마다 계속 로그인을 해야 한다. 따라서, 클라이언트 인증을 유지하기 위해 쿠키와 세션을 사용한다. 쿠키(Cookie) 쿠키는 클라이언트 측(로컬/브라우저)에 ..
Java Generic type과 C++ Template는 생긴 것은 비슷하지만 두 언어가 이를 처리하는 과정은 다르다. Java의 Generic은 타입 제거라는 개념에 근거한다. 이 기법은 소스코드를 Java 가상 머신(JVM)이 인식하는 바이트 코드로 변환할 때 인자로 주어진 타입을 제거하는 기술이다. Java Generic이 있다고 해서 크게 달라지기보다 뭔가 더 예쁘게 작성할 수 있게 해 준다. 따라서 이를 문법적 양념(syntactic sugar)라고 부른다. C++의 template은 좀 더 우아한 형태의 매크로로써 상황이 다르다. 컴파일러는 인자로 주어진 각각의 타입에 대해 별도의 템플릿 코드를 생성한다. (ex. Myclass, Myclass가 서로 static 변수를 공유하지 않는다.) ..
추상화 (Abstraction) 공통의 속성이나 기능을 묶어서 이름을 붙이는 것 객체 지향 관점에서 클래스를 정의하는 것이 추상화라고 할 수 있다. 절차 지향 프로그래밍에서도 데이터를 추상화해서 하나의 새로운 데이터 유형을 만드는 구조체가 해당된다. 하나의 새로운 데이터 형태를 정의하는 데 그 안에 여러 개의 부속 데이터를 둘 수 있다. 캡슐화 (Encapsulation) 데이터 구조와 데이터를 다루는 방법을 결합시켜 묶는 것 (변수와 함수를 하나로 묶기) 묶을 때 객체가 맡은 역할을 수행하기 위한 하나의 목적을 한데 묶는다고 생각해야 한다. (은닉화) 또한, 데이터를 절대로 외부에서 직접 접근하지 않고 오로지 함수를 통해서만 접근이 가능하도록 해야 함 – 캡슐화 따라서 캡슐화에 성공하면 은닉화도 자연스..
1. 버퍼 오버플로우 (Buffer Overflow) 버퍼 오버플로우는 일종의 버그이며, 이를 응용하여 시스템을 공격하는 하나의 방식을 의미한다. 버퍼 오버플로우는 메모리 버퍼의 사용 영역이 실제 할당된 영역 이상의 공간을 침범하는 현상이다. 버퍼 오버플로우의 발생 시 버퍼에 다 담기지 못한 값은 버퍼 이후의 공간에 들어차게 되며 이 값들은 이후의 공간에 덮어 쓰이는 현상이 발생한다. 2. 공격 방식 해커들은 이런 버그를 이용하여 시스템 영역의 메모리에 침입하여 관리자 권한을 획득하거나 주요 정보를 탈취하는 등의 방식으로 시스템을 공격한다. 다음 그림은 스택 오버플로우를 이용한 시스템 공격 방식에 대한 설명이다. 간단히 설명을 붙이자면 스택 오버플로우를 시스템 영역까지 확장시킨 후 스택의 Return 값..
결합도와 응집도란? SW공학에서 결합도와 응집도는 중요한 개념이다. 둘의 개념을 혼동하는 경우가 많기 때문에 각각의 특징을 분석하고 차이점을 통해 비교해보고자 한다. 결합도 (Coupling) 소프트웨어 공학에서 결합도(또는 의존도)는 어떤 모듈이 다른 모듈에 의존하는 정도를 말한다. 보통 응집도(Cohesion)와 그 개념이 대비된다. 결합도는 약해질 수도 있고 강해질 수도 있다. 강한 것부터 약한 것으로 순서를 나열하면 다음과 같다. Procedural Programming Content Coupling (내용 결합도) 하나의 모듈이 다른 모듈의 내부 동작을 수정하거나 내부 동작에 의존하는 상태. 따라서 한 모듈이 데이터를 생성하는 방법을 변경하면, 다른 모듈의 변경이 필요하다. (ex. 다른 모듈의..