본문 바로가기

전공

(25)
자바 업캐스팅 다운캐스팅 (문제풀이) 프로그래밍 언어론을 공부하면 피해갈 수 없는 자바의 업캐스팅과 다운캐스팅.. 볼 때마다 헷갈리기에 한번은 정리하고 갈 필요가 있다고 생각했었다. 업캐스팅과 다운캐스팅의 문제는 보통 상속의 관계에서 일어난다. 이를 이해하기 위해서 딱 두가지 정도만 개념을 확실하게 잡고가자. 참조변수와 인스턴스의 구분을 확실하게 하자 큰 것은 작은 것을 담지 못한다. 대입(=)이 일어날 때, 참조변수와 인스턴스끼리 대입이 일어나는 경우 ( a = new A()) 대입(=)이 일어날 때, 참조변수와 참조변수끼리 대입이 일어나는 경우 ( a = b ) 부모가 자식을 참조하려 할 때 자식이 부모를 참조하려 할 때 이것이 무슨 뜻인지 예시를 들면서 설명하겠다. 아래와 클래스가 있다. Child 클래스는 Parent 클래스를 상속하..
[프로젝트 규모 산정] 기능점수(Function Point, FP) 구하는 방법 1. 기능점수 개요(Function Point, FP) IBM사의 Allan J. Albrecht에 의해 처음 개발되었다. 사용자가 요구한 기능을 기반으로 전체 시스템의 규모를 산정한다. 장점 개발에 사용된 기술, 환경, 언어, 도구, 개발자 능력으로부터 독립적이다. 사용자 요구사항만으로 규모 산정이 가능하기 때문에 소프트웨어 개발 초기단계에 산정이 가능하다. 단점 프로젝트 초기 단계에 모든 요구사항을 파악하기에 어렵다면, 산정이 어려움 알려지지 않은 기능의 복잡도가 있다면 산정이 어려움 2. 기능점수 측정 방식 절차 측정유형 결정 → 측정범위와 앱 경계를 식별 → 데이터 기능 측정 → 트랜잭션 기능 측정 → 기능 점수 산정 2.1. 측정 유형 결정 측정 유형은 개발 프로젝트, 개선 프로젝트, 애플리케이..
소프트웨어 생명주기 모델 소프트웨어 생명주기 모델 주먹구구식 개발 모델(빅뱅 모델) 폭포수(Waterfall) 모델 프로토타입(Prototype) 모델 나선형 모델 UP, Unified Process XP (Agile) 2. 폭포수(Waterfall) 모델 개발 프로젝트의 기본적인 모델이자 가장 많이 사용되고 있는 모델 각 단계는 '요구사항 분석 - 설계 - 구현 - 테스팅 - 유지보수' 다. 각 단계마다 요구하는 활동, 조건, 산출물이 모두 만들어져야지만 다음 단계로 넘어갈 수 있다. 폭포수가 밑에서 위로 흐르지 않는 거처럼, 이 모델도 다시 이전 단계로 되돌아가는 것은 매우 어렵다. 장점 각 단계별로 정형화된 접근 체계화된 문서화 프로젝트 진행의 명확성 (전체 공조의 이해가 용이) 단점 앞 단계 일정이 지연될 시, 다음 단계..
JAVA 시험 전에 보고가는 요약집 #1 1. 변수 - 이름 규칙 대소문자가 구분되며 길이에 제한이 없다. (True와 true는 다른 것) 예약어(키워드)를 사용해서는 안 된다. (true는 예약어라서 사용이 불가능하지만 True는 가능하다.) 숫자로 시작할 수 없다. 특수문자는 '_'와 '$'만 허용한다. ($harp는 가능, S#arp는 불가능) - 필수는 아니지만 권장하는 규칙 클래스 이름의 첫 글자는 항상 대문자로 한다. (변수와 메서드의 이름의 첫글자는 항상 소문자로 한다.) 여러 단어로 이루어진 이름은 단어의 첫글자를 대문자로 한다. (lastIndexOf, StringBuffer) 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 _로 구분한다. (PI, MAX_NUMBER) - 변수의 타입 모든 변수는 타입을 갖는다..
애플리케이션 계층 - 웹의 모든 것(HTTP, Cookie, Cash, Proxy) 웹은 OSI 7 Layers의 최상위 계층에서 동작하는 서비스로서 우리가 흔히 이용하는 네이버 웹 페이지, 구글 웹 페이지 등의 그 '웹'을 통칭한다. 웹의 특징은 크게 다음과 같다. 웹은 서비스를 원할 때 원하는 것을 수신받을 수 있는 On-Demand 서비스다. 웹은 원하는 것을 요구/수신받을 때 HTTP 프로토콜을 이용한다. 웹은 클라이언트-서버 구조다. HTTP는 비상태, 비지속 프로토콜이다. 서버가 사용자를 구분하기 위해 사용하는 것이 쿠키다. 웹 캐시(또는 프록시)는 서버의 응답 속도를 높이기 위해 사용된다. 지금은 이해가 잘 안될테지만 자세하게 하나씩 살펴가며 이해해보자. 1. 웹은 서비스를 원할 때 원하는 것을 수신받을 수 있는 On-Demand 서비스다. 인터넷 이전에 우리가 사용하던 T..
애플리케이션 계층 - 개요 오늘은 OSI 7Layer의 최상위 계층인, 응용 계층, 영어로는 애플리케이션 [Application] 계층이라고 한다. 애플리케이션? 우리가 아는 핸드폰에 다운로드 받는 그 애플리케이션과 같은 이야기인가? 맞다. 바로 그 이야기다. 우리는 친구와 연락을 하고 싶으면 카카오톡 애플리케이션을 이용하여 친구와 메시지를 주고 받는다. 즉 애플리케이션 계층은 일반 사용자와 가장 밀접하게 연관되어 있는 계층이며 개발자에 의해 개발된다. 애플리케이션 계층에서 자주 사용하는 통신 구조는 대표적으로 두가지가 있다. 클라이언트-서버 구조와 P2P 구조다. 클라이언트-서버 구조 예를 먼저 들어보자. 내가 네이버에 접속해서 "대전 맛집"를 검색하면 네이버는 대전 맛집 리스트를 보여준다. 이때 나는 정보를 요청하는 쪽은 클라..
전송 계층 - TCP 의 모든 것 #2. 흐름제어, ARQ, Sliding Window 들어가기 전에, 해당 포스팅에선 '메시지'란 단어와 '패킷'이란 단어를 함께 혼용해서 사용했다. 따라서 글을 읽으면서 같은 뜻이라고 이해하고 읽으면 될 것 같다. 그러나, 원래 정의는 메시지는 7계층인 application 계층의 단위이며 이러한 메시지를 전송하기 편하게 잘게 쪼개놓은 것을 packet인 것을 염두하자. TCP는 흐름제어를 통해 메시지 전송을 보장한다. 흐름제어란 송신자[Sender]가 메시지를 보내는 속도가 수신자[Receiever]가 메시지를 처리하는 속도보다 빠를 때, 수신자의 메시지 함은 점점 차게 되고 결국 FULL 상태가 된다. 메시지 함이 꽉찬 상태에서 메시지를 더 받게되면 더 이상 저장할 공간이 없기 때문에 메시지를 버려야 하는 상황이 온다. 이를 '오버플로우[Overflo..
전송 계층 - TCP 의 모든 것 (#1. 핸드세이킹, 혼잡제어) TCP는 신뢰성이 중요한 통신에서 사용되는 프로토콜이다. 신뢰성을 높이기 위해 여러가지 부수적인 임무를 담당하고 있는데 그 중에 대표적인 것이 핸드셰이킹, 혼잡제어, 흐름제어다. 논리적 연결- 핸드셰이킹을 통해 가상의 연결 터널(회선 통신)을 만들고 이를 통해서 데이터를 주고받는다. 흐름제어- 송신자[Sender]와 수신자[Receiver]의 메시지 속도를 조절하여 오버플로우를 방지한다. 혼잡제어- 송신자와 수신자 사이에 존재하는 네트워크의 혼잡도를 조절한다. 1. 핸드셰이킹[Handshacking]을 통한 논리적 연결 생성 논리적 연결이란 송신자와 수신자만을 위한 통로를 하나 만들어서 이 통로를 이용해서 통신하겠다는 의미이다. 한번 연결 통로를 만들어놓으면 이를 해지할 때까지 계속 이 통로 안에서 데이..
전송 계층 - UDP와 TCP의 모든 것 전송계층을 대표하는 프로토콜은 UDP와 TCP다. TCP의 역할이 UDP에 비해 현저히 많기 때문에 포스팅을 두개로 나눌까 고민했지만 둘은 뗄래야 뗄 수 없는 사이인 것 같아 한번에 하기로 했다. 1. UDP[User Datagram Protocol] UDP의 모토는 '최소한의 기능으로 동작하자'다. 따라서 복잡한 과정은 일체없이 가벼운 임무만을 수행한다. 연결없다. 신뢰도 없으며 데이터 순서로 올바르지 않다. 그러면 왜 사용할까? 이것 저것 없이 전송만 하기 때문에 속도가 굉장히 빠르다. 비 연결형 프로토콜 신뢰할 수 없다. [데이터가 전송되었는지 보장X. 데이터의 순서가 올바른지 보장X] 속도가 빠르기 때문에 신속성이 중요한 서비스에 유리하다. UDP를 이용하는 서비스: DNS, SNMP, TFTP,..
전송 계층 - 전송 계층 개요 #1. 다중화, 포트, 소켓 전송 계층은 OSI 7 Layer 중 네 번째에 위치한 계층으로서 데이터 단위는 세그먼트[Segment]다. 전송 계층의 역할은 '논리적 통신'이다. 송신자[Sender]와 수신자[Receiver]가 서로 통신할 때 물리적 관점에서 이들의 메시지는 많은 라우터와 링크를 거쳐야하지만, 이를 직접 연결된 것처럼 보이게끔 하는 것이다. 즉 정리하자면 쉽게 그냥 '전송'을 담당하고 있다고 생각하자. 전송 계층은 메시지의 전송이 올바르게 되는 것을 보장하기 위해서 몇가지 역할을 하고 있다. 1. 다중화와 역다중화 (=세그먼트 생성) 전송 계층은 Application 계층에서 메시지[Msg]를 받은 후 이를 쪼개 세그먼트 단위로 만든다. 그 후, 각 세그먼트마다 전송 계층의 헤더를 붙인다. 이 과정을 다중화[Mul..