공부 136

소켓통신 개념(포트(port)개념)

소켓통신을 이해하기 위해선포트(port)를 이해하는 선수과정이 필요하다. 포트는 주차요원이 손님의 차키를 받아서 주차를 시킬 때 만약에 주차선을 지키지도 않고 그냥 넣어지는 대로 주차를 하면 어떻게 될까? 아마 차를 뺄 수도 없게 되고 한 곳에 차를 몰아서 주차시켰다면 꽉 차서 주차를 더 이상 할 수 없게 될 수도 있다. 차를 주차시키는 위치가 포트 주소가 된다. 컴퓨터통신에 왜 포트가 필요할까? 컴퓨터로 LOL도 하고 카카오톡 도하면서 스타크래프트도 동시에 할 수 있다. 그럼 각각 의 프로그램이 데이터를 주고받기 위해서 Byte Stream이 필요하게 되는데 LOL도 스타도 카톡도 다 각자의 ByteStream이 필요한 상황에서 컴퓨터로 연결된 렌선은 하나밖에 없다. 그럼 LOL 서버로부터 우리 집 컴..

JAVA,객체지향 2021.12.02

버퍼(Buffer)란?

Buffer -> 임시 저장 공간 Buffer를 이해하기 전에 Stream 대한 이해가 필요하다. Stream 이란? 마치 수도꼭지와 비슷한데 수도꼭지에서 물을 틀어서 그 물이 수도관을 통해서 내려가게 되는데 이 수도꼭지를 여는 순간 물이 이동하는 물의 흐름을 Stream이라고 한다. 이 물의 흐름을 프로그램에서는 전류의 흐름으로 다룬다. 흔히 Stream은 컴퓨터를 이용하면서 늘상 존재하는데 키보드를 사용할 때도 키보드에서 누르는 자판의 신호를 전기적 신호로 본체에 전달해서 원하는 문자열이 모니터에 다시 출력되기까지는 수많은 전기선과 장치들로 전류가 이동하면서 일을 하기 때문에 사용할 수 있는 것이다. 그럼 조금만 생각해 보면 Stream이라는 것은 흐름이라 흐름을 주는 쪽과 받는 쪽으로 나눠지게 되는..

JAVA,객체지향 2021.12.02

String Constant Pool

java에서 문자열을 표현할 때는 String을 사용하는데 이 String이란 이름에서 얻을 수 있는 힌트는 첫 글자가 대문자라는 점에서 클래스라는 것을 유추해 낼 수 있다. String은 Char의 배열 형태 인데 그럼 지금 까지 배운 문법에서는 클래스를 사용하려고 메모리에 띄우기 위해선 new를 해야 한다. 왜 String은 그냥 사용해도 되는 것일까? 분명 같은 문자열을 s1과 s2에 저장을 했는데 왜 false가 나오냐면 java에서는 "=="을 사용해서 비교를 하게 되면 메모리 주소 번지를 비교한다. 즉 s1과 s2의 주소 번지가 다르기 때문에 false가 나온다. 처음에 java언어를 개발한 Sun이라는 회사에서 String클래스는 사용빈도가 굉장히 높을 것 같아서 String클래스만 특별히 ..

JAVA,객체지향 2021.12.02

예외처리란?

예외처리는 Exception이라고 한다. 예를 들어서 슈퍼마켓을 운영을 하는데에 위험 요소 및 준비해야 할 것 들을 생각해보자. 1. 도둑을 잡기 위해 cctv 설치 2. 잔돈 준비 2. 직원 채용 3. 장소 임대 등등 이 있다. 그렇게 준비할 것을 준비를 해 놓고 운영을 시작해서 장사를 하다 보면 생각지도 못한 문제점들이 생길 수 있다. 잔돈이 모자랄 수 있다. cctv 사각지대에 있는 물건이 도난당했다. 등등.. 그럼 위 상황을 크게 두 가지로 나눌 수 있는데 운영전/운영후 java에서 운영전(실행 전)에 일어나는 준비과정 및 위험요소 제거는 jvm이 알아채고 오류를 발생시켜 예외처리(try/catch)를 하도록 개발자에게 강제로 시켜버린다. 운영 후에 생기는 예외에 대한 처리는 런타임 시에 일어나기..

JAVA,객체지향 2021.12.01

스레드란?

스레드는 빛처럼 빠른 홀서빙 아르바이트생 같은 것이다. 이 아르바이트생은 너무나 빨라서 음식을 나르고, 반찬을 담고, 인사를 하는 이 여러 가지에 일이 동시에 일어나는 것처럼 보일 정도이다. 이렇게 하면 한 명의 빛처럼 빠른 아르바이트생이 여러 가지 일을 하지만 보는 사람으로 하여금 동시에 여러 명이 위에 일을 처리하는 것처럼 보이는 것이다. 근데 이 알바생이 고민이 있다. 자신이 빠르기는 한데 김치를 담다가 손님이 와서 인사와 김치 담기를 동시에 하는데 "안"까지 말하고 다시 반찬 담는 곳에 와서 김치를 담다가 다시 돌아가서 "녕"을 말해야 하는데 이 아르바이트생이 어디까지 인사말을 했는지 까먹은 것이다. 그래서 몇 번의 실수 끝에 이 아르바이트생이 고안한 방법이 있다. Context(문맥=전후 시점)..

JAVA,객체지향 2021.12.01

SRP와 DIP

SRP (single Response Principle) 단일 책임원칙 객체지향 프로그램에서의 책임 책임 -> 행위(메서드)를 뜻한다. 단일 책임원칙이 필요한 이유는 책임을 단순하게 분리해서 유지보수가 훨씬 수월하도록 설계하는 것이다 한 가정에 엄마 아빠 딸이 있다면 엄마 혼자서 요리, 빨래, 청소를 다 하면 빨래에 문제가 생겼을 때 엄마의 코드를 다 수정해야 하는 경우가 발생할 수 있다. 그래서 엄마는 요리만 하고 아빠는 청소만 하고 딸은 빨래만 하도록 설계하는 것이다. 그러면 청소에 문제가 생기면 아빠만 손보면 되는 것이고 빨래에 문제가 생기면 딸만 손보면 되기 때문이다. 이렇게 책임을 분리해서 관리하여서 문제가 생겼을 때 여기저기 책임을 묻는 것이 아닌 해당 문제점이 발생한 곳에만 책임을 물을 수 ..

JAVA,객체지향 2021.11.26

추상클래스와 인터페이스의 차이

인터 : 교차로 페이스 : 직면하다. 인터페이스는 위 교차로처럼 저 길로 들어선 순간 저 세 가지길 외에는 갈 수 없다는 행위에 대한 강제성이 부여된다. 인터페이스는 흔히 약속이라고 얘기하는데 개념은 일방적인 약속이다. 만든사람입장에서 갑의 입장으로 일방적으로 약속을 주입시키는 것이다. 그래서 인터페이스는 갑과 을이 존재하는 약속이다. 자바에서 인터페이스는 행위에 대한 제약을 준다. 추상 클래스와 인터페이스의 차이 자 위와 같은 경우는 추상 클래스로 구현을 해야 한다 사나운 동물이라는 추상적인 것들의 행위는 정해놓을 수 없기 때문에 미완성 설계도만 만들어놓고 new 해서 띄울 수 있는 실체가 있는 것들이 설계도를 완성하도록 해야 한다. 그럼 위 동물들로 게임을 만들어본다고 가정을 하면 자 위 그림처럼 네..

JAVA,객체지향 2021.11.26

추상클래스

추상 클래스 = 추상적인 것(new 할 수 없다) 의자 침대 = new가능 가구 = new 불가능 자 다음과같이 오버 라이딩을 했을 때 d1.speak();를 호출을 하면 d1은 Animal타입이지만 동적 바인딩을 통해서 부모 메서드를 무효화하고 자식 메서드의 speak()가 호출이 된다. 그렇다면 Animal은 내용은 없이 껍대기만 있으면 되는데 일반적인 클래스로 하면 new로 메모리에 띄울 수 있기 때문에 실수할 확률이 높아진다. 그럴 때 abstract를 붙여서 추상 클래스를 만들어주는 것이다. 다음과 같이 추상 클래스로 만들어주면 추상적인 것이기 때문에 java세상에서 new로 탄생시킬 수 없다. 그럼 Bird클래스를 추가시켜서 Animal을 다시 상속받아본다고 하면 오류가 난다. 왜 오류가 날까..

JAVA,객체지향 2021.11.26

오버라이딩

오버 로딩의 한계를 해결하기 위해서는 다른 방법이 필요하다. 저번과 비슷한 프로그램을 만들었는데 역시나 다음과 같은 문제가 발생한다. 유닛이 늘어날수록 오버 로딩해야 할 메서드가 너무 많아진다는 점이다. 이 문제를 해결하기 위해서 "다형성"을 하면 된다. 자 그러면 이제 유닛들이 자유롭게 서로를 공격할 수 있게 될까? 지금 위와 같은 경우면 유닛들이 바라보는 타입이 프로토스 유닛이기 때문에 아무런 행위도 메모리에서 찾지 못한다. 자 그럼 위 문제를 해결했는데 위 코드의 결과를 보면 부모의 타입을 가지고 있는 u1객체가 부모 클래스와 질럿 클래스에서 둘 다 똑같은 이름으로 가지고 있는 "기본 공격()"메서드를 호출했는데 "질럿 메서드"가 나오는 것을 볼 수 있다. 위 경우와 같이 부모 클래스의 메서드명과 ..

JAVA,객체지향 2021.11.25