java 93

스레드란?

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

오버로딩과 오버로딩의 한계

Over loading = 과적재 클래스는 상태와 행위를 가질 수 있다. 이때 어떤 클래스가 행위(메서드)를 가지고 있는데 이름이 똑같은 행위(메서드)를 가지고 있다 하더라도 매개변수가 다르다면 같은 이름의 행위(메서드)를 선택적으로 사용하도록 허락해주는 기법이다. 그럼 오버로딩된 메서드를 호출을 할 때 상황에 따라서 유연하게 매개변수를 입력해 줄 수 있다. 왜 오버로딩이 객체지향에서 중요한 문법이냐면?! 사실 저렇게 하지 않고도 메서드를 하나 더 만들면 된다 하지만 왜 오버 로딩이란 것이 탄생하게 됐고 이 오버 로딩의 한계는 무엇일까? 오버 로딩의 한계 자 다음과 같은 프로그램을 만들었다. 위 프로그램의 단점이 무엇일까? 첫 번째로 자유도가 떨어진다. 전사는 궁수만 공격할 수 있고 궁수는 광전사만공격할..

JAVA,객체지향 2021.11.25

다형성

다형성의 사전적 의미는 다음과 같습니다. 좀 더 쉽게 설명을 하자면 홍길동이라는 가상의 인물의 직업이 요리사이다. 그럼 이 홍길동이란 인물을 java세상에 만들어 본다면 홍길동 클래스가 요리사라는 클래스를 상속한다. 이 둘이 상속이 가능한 이유는 홍길동 보고 요리사라고 물어보면 "네"라고 할 수 있고 요리사 보고 홍길동이니? 해도 "네"라고 할 수 있다. 즉 홍길동은 다양한 형태를 가지고 있는 것이다(다형성) 홍길동 extends 요리사 그럼 홍길동을 메모리에 올리고 싶어서 new 홍길동(); 을 하게 되면 메모리에 요리사와 홍길동이 같이 올라온다. 하지만 new요리사();로 요리사로 띄우게 되면 메모리에는 요리사만 올라온다. 위 그림처럼 new홍길동();하면 메모리에 홍길동 요리사가 뜨기때문에 new홍..

JAVA,객체지향 2021.11.21

클래스? 오브젝트? 인스턴스???

인스턴스 클래스는 설계도와 같은 역할을 한다. 신이 사람이라는 클래스라고 만들 때 기본적인 설계도만 만들어진 상태로 만들어 두고. 사람이라는 객체에 다양성을 위해서 new 해서 사람이 java세상에 태어날 때 생성자의 매개변수를 통해서 다양성을 제공받는다. new 해서 만들어질때 메모리에 heap공간에 뜨는데 이 new를 통해서 메모리에 뜬것들을 인스턴스라고 한다. 오브젝트 구체적인것(셀 수 있는 것) 영어에서는 물질 명사라고 한다. 그럼 이 구체적인것이 무엇이 있을까? 위 그림을 보면 의자 침대 탁자는 구체적이고 셀 수 있는 것들이지만 가구라는 것은 굉장히 추상적이다. 이런 것을 영어에서는 추상명사라고 한다. 가구는 실제 존재 할 수 없는 것이기 때문이다. 예를 들어서 집에 의자를 들일수는 있지만 가구..

JAVA,객체지향 2021.11.21

클래스만들기/생성자/this

패키지는. java파일의 모임이다. 1. 디폴트 접근제어자(아무 접근제어자도 명시돼 있지 않을 때) = 동일한 패키지에서만 접근 가능 2. public 접근 제어자 = 모든 곳에서 접근할 수 있다. 3. private 접근 제어자 = 동일한 클래스에서만 접근 가능 4.protected 접근제어자 = 패키지 내의 클래스 또는 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근 가능 클래스 = class = 설계도 class= 설계도 이기 때문에 강아지 클래스를 만들어보는데 이때 강아지의 종류인 type필드는 변경해서는 안되기 때문에 final이라는 키워드를 사용해서 변경할 수 없도록 해주었다. 하지만 클래스에서 필드를 저렇게 초기화시켜 줘 버리면 해당 클래스는 위와 같은 특징을 가진 강아지 한 마리만 만..

JAVA,객체지향 2021.11.20