개발/프로그래밍
-
인터넷 네트워크 TCP/IP개발/프로그래밍 2022. 3. 16. 13:18
참조 : https://inf.run/hQwZ 인터넷 프로토콜IP 인터넷망에서 어떻게 친구에게 메시지를 보낼수 있을까? IP 주소가 있기 때문에 가능해진다. 내 IP 주소 : 100.100.100.1 서버 :200.200.200.2 메시지는 패킷 단위로 전달이 된다. 패킷에는 출발지 IP,서버 IP , 메시지가 들어있다. 그러나 IP로만 통신 하기에는 여러 문제들을 가지고있다. 1. 패킷 받을 사람이 없어도 전송이 된다. 2. 패킷의 순서가 바뀌거나 사라질수있다. 3. 같은 IP에서 여러 애플리케이션을 사용하면 프로그램 구분이 힘듬 TCP IP통신의 문제들을 TCP가 해결해 준다. TCP 는 transmission control protocol , 전송 제어 프로토콜이다. TCP UDP 는 인터넷 프로토..
-
메모리 구조 (code,data,stack,heap)개발/프로그래밍 2021. 11. 14. 14:52
메모리는 코드, 데이터, 스택, 힙 으로 구성되어있다. 코드는 개발자 작성한 코드가 바이너리 형태(이진법) 으로 Read-only 로 저장된다. 데이터는 전역변수 와 static 변수가 저장된다. 프로그램 시작과 함께 메모리에 할당되고 프로그램 종료시 소멸된다. 스택은 지역변수/매개변수가 저장된다. 함수호출시 메모리에 할당되고 함수 종료시 소멸된다. 코드 / 데이터 / 스택은 모두 컴파일타임에 메모리 크기가 결정된다. 힙은 클래스 인스턴스나 클로저같은 "참조 타입의 값" 의경우 힙에 할당된다. 따라서 코드,데이터,스택 과 달리 런타임시 메모리 크기가 결정된다. 개발자가 할당/해제 하는 영역이다. 이를 동적 할당이라고하며 매모리 해제를 해주지 않는경우 "메모리 릭" 이 발생한다. swift 는 직접 해제 ..
-
객체지도개발/프로그래밍 2021. 11. 7. 19:57
소프트웨어는 기능과 구조로 구성된다. 기능은 사용자가 필요로 하여 사용하는 것이고 구조는 해당 소프트웨어가 어떻게 구성되는가 이다. 기능을 위주로한 개발과 구조를 위주로한 개발의 차이점은 구조를 위주로 한 개발이 더 새로운 기능에대한 유연한 대처와 범용성 그리고 재사용성이 가능하다는 것이다. 새로운 기능에 대해 고려하지 않는다면 필요한 기능만 잘 돌아가면 되지만 미래에 예측할수 없는 새로운 변화에대해 대처하기 위해서는 구조를 위주로한 개발을 해야한다. 내가 원하는 목적지에 도달하기위해 지나가는 사람에게 길을 물을수도 있지만 지도를 사용해 목적지에 도달할수있다. 지도라는 구조를 사용해 목적지에 도달하는 기능을 수행한다. 길을 묻는것은 하나의 목적지만 갈수있지만 지도라는 구조가 있다면 누구든지 어디에도 갈수..
-
[객체지향의 사실과 오해-2] 역할,책임,협력,책임주도 설계개발/프로그래밍 2021. 10. 30. 17:03
객체지향 설계는 중요하게 책임, 역할, 협력으로 구성된다. 이상한 나라의 앨리스에서 재판을 하는 이야기를 보면 왕이 재판을 주관하여 재판이 진행이되는데 왕이 토끼에게 모자장수(증인)을 부르라 명하고 토끼는 증인을 불러와 증인이 증언을 하는 내용이 있다. 여기서 이 각 객체들은 협력을 통해 재판을 진행한다. 그리고 이 협력은 요청과 응답으로 이루어진다. 1. 누군가 왕에게 재판을 요청한다. 2. 왕이 토끼에게 (모자장수)증인을 불러올것을 요청한다. 3. 토끼는 증인에게 재판에 입장을 요청한다. 4. 증인은 재판 입장에 응답한다. 5. 증인은 왕에게 증언을 응답한다. 여기에서 각 객체가 수행하고 있는 요청과 응답은 각 객체의 책임을 의미한다. 토끼는 증인을 불러올 책임을 가지고있고 증인은 증언을 할 책임이 ..
-
[객체지향의 사실과 오해-1] 객체,캡슐화,추상화개발/프로그래밍 2021. 10. 16. 17:29
흔히 커피를 주문할때 필요한 사람은 손님과 캐시어 그리고 바리스타로 구성된다. 손님은 커피를 주문하고 캐시어는 바리스타에게 주문을 알려준다. 그리고 바리스타는 커피를 제조할것이다. 이 사람들을 객체로 생각해보자 각 객체는 역할과 책임을 다한다. 손님은 주문을 할 역할과 책임, 캐시어는 주문을 받아 바리스타에게 커피를 요청할 역할과 책임 그리고 바리스타는 커피를 제조할 역할과 책임을 가진다. 그리고 각 객체들은 각자의 역할과 책임을 가지며 협력한다. 또 각 객체들은 자율성을 가지고있다. 자율성이란 자기 스스로 원칙에따라 일을하거나 스스로 통제 절제하는것이다. 예로 어떻게 주문할지 어떻게 커피를 만들지 의 문제는 각 객체가 스스로 판단하여 행동한다. 그것을 자율적이라 표현한다. 각 객체들이 협력을 하기위해 ..
-
클린코드 - 클래스개발/프로그래밍 2020. 10. 12. 08:52
클래스 작성시 내부 순서는 이렇게한다 1. 정적/공개 상수 2. 정적 비공개 변수 3. 비공개 인스턴스 변수 (공개변수는 잘쓰지않는다) 4. 공개함수, 비공개함수 클래스는 작아야한다 클래스나 모듈을 변경할 이유가 하나여야한다. 이를 단일책임원칙 SingleResponsibilityPrinciple 이라한다 class SuperDashboard{ getLastFocusedComponent() getVersionNumber() } 해당 클래스는 1. 버전정보를 추적하고 2. 스윙컴포넌트(UI) 를 관리한다 버전이나 스윙코드가 바뀔수있으므로 변경할 이유가 두가지인 클래스이다. 이런경우 version 클래스를 따로 뺴내서 SRP를 지킬수있다. 클래스에서는 인스턴스 변수의 갯수가 작아야한다 메소드가 변수를 많이쓸..
-
클린코드 - 오류,예외처리개발/프로그래밍 2020. 10. 7. 08:54
예외가 발생항수있는 코드는 try-catch 블록을 써야한다. 확인된 예외는 컴파일단계에서 확인되는 FileNotFount 에러 같은것이다. 코드의 문제가 아닌 참조한 파일이없다던지 같이 환경의 문제이다. 미확인된 예외는 런타임단계에서 확인되는 코드 문제들이다. 확인된 예외를 사용하는경우 최 하휘함수에서 예외가 발생할떄 그것을 호출하는 상위 함수 와 그상위함수들 모두 catch 블록으로 예외를 처리해줘야한다. 확인된 예외는 Open Closed Principle 을 위반한다. ACMEport port = ACMEPort(12); ///외부라이브러리 try{ port.open(); } catch(DeviceResponseException e){ reportPortError(e); } catch(ATM121..
-
클린코드 - 객체와 자료구조개발/프로그래밍 2020. 10. 6. 17:05
자료를 세세하게 공유하기보다 추상적인 개념으로 표현하는게 좋다. 아무생각없이 get set 함수를 만드는것은 추상화를 이루지않는다. 객체는 자료를 숨기고 자료를 다루는 함수만 공개한다. 자료구조는 자료를 공개하고 함수가 없다. class Square { Point topLeft; double side; } class Rectangle { Point topLeft; double height; double width; } class Geometry { final double pi = 3.14; double area(dynamic shape) { if (shape is Square) { Square s = shape; return s.side * s.side; } else if (shape is Rectang..