JAVA,객체지향 44

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

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

자료형이란?

자료형이란? 물건을 저장하기 위해 창고를 설계한다고 가정해 보자 그럼 마구잡이로 넣을 수 없으니 정리를 위해서 포장을 해야 한다. 포장을 할 때 사과라는 물건을 저장하는데 창고 2칸에 6개가 딱 맞고 딸기라는 물건을 저장하는데 창고 4칸에 10개가 들어가야 딱 맞게 저장이 된다 그럼 포장에 단위를 알 수 있다. 그럼 이제 창고에 들어올 물건의 양을 알아야 한다. 그래야 그 양에 맞춰서 창고에 칸을 마련해 놓을 수 있기 때문이다. java도 마찬가지다 자바도 프로그램을 시키려면 창고 설계가 필요하다고 생각하면 된다. java에서 포장단위는 8가지 타입으로 이미 정해져 있다. boolean = 1bit(bit는 포장단위) =2에 1승 = 2 = 참 or 거짓 int = 32bit =2에 32승 =42억 9천..

JAVA,객체지향 2021.11.18

AWT/JFrame 사용해서 그림그려보기

위와 같이 jFrame을 상속하고 실행시켜 보면 다음과 같은 윈도 창이 나온다 빨간 네모가 jpennel이 되는 것 계속 이 윈도 창이 켜져 있다는 것은 내부적으로 while이 돌고 있다는 뜻이다. 그럼 이 패널에 그림을 그리기 위한 도구를 다운로드하여 보자 위와 같은 레이아웃은 제약이 많기 때문에 자유롭게 그림을 그리기 위해서는 absolute layout을 선택한다.

JAVA,객체지향 2021.11.17

AWT 라이브러리 개념 (그림 그리는 라이브러리)

일반적인 window os에서 폴더를 열거나 하면 윈도 창이 나온다. awt라이브러리를 사용하면 JFrame이라는 윈도우 창을 하나 만들 수 있다. 그럼 이 JFrame안에 그림을 그릴수 있게 도화지가 내장돼 있는데 이 도화지를 JPanel이라고 한다. jpanel안에 그림을 그릴 수 있는 것이다. JFrame은 내부적으로 while(반복)이 돌면서 사용자가 jpanel에 그림을 그릴 수 있게 하는데 픽셀 단위에 좌표로 그림을 그릴 수 있다. 그렇기 때문에 이 픽셀의 단위가 촘촘하면 촘촘할수록 해상도가 좋아진다. 수많은 좌표에 점이 찍히면서 전체적인 그림이 완성되는 개념이다. AWT 컴포넌트 예를 들어 버튼을 하나 AWT를 통해 만들었다고 가정을 해 볼 때의 단점을 생각하면 -디자인 애니메이션 구현이 어..

JAVA,객체지향 2021.11.17

JAVA/ 상속과 콤포지션

java에서 extend를 상속이라 표현하고 부모와 자식 관계로 표현하지만 그것은 좀 더 깊은 이해를 하는 대에 있어서 방해될 수 있는 것 같습니다. 이번 포스팅에서 extend를 '확장하다'의 개념으로 접근해서 포스팅해 보겠습니다. 위와 같은 자동차 프로그램을 만든다고 할때 위 그림과 같이 엔진이라는 라이브러리를 import 해서 자동차 프로그램에 사용하는 것을 상속이라 하지 않는다. import는 상태, 행위를 가져와서 사용하는 개념이다. 상속과 import가 다른 점은 상속은 추상화가 가능하고 상태와 행위를 물려 받을 수 있다. 위 두가지 상황을 예를 들어 설명을 하자면 자동차는 엔진을 가져와서 사용해야 한다. 왜냐하면 자동차= 엔진이라고 볼 수 없기 때문이다. 엔진과 자동차는 타입일치가 되지 않는..

JAVA,객체지향 2021.11.11

java/라이브러리 만들기

라이브러리 = 도서관 예를 들어 김치찌개를 만든다고 가정을 해보자 이때 라이브러리가 있으면 김치찌개를 상상해서 만들 필요가 없다. 도서관에 있는 김치찌개 만들기 서적을 보면 되기 때문! 그걸 JAVA에 빛대어 보면 이 김치찌개 만들기 서적을 들고 와서 보는 것이 import가 되는 것이다. 라이브러리 만들기 위와 같은 자바 project를 만들고 위와같은 클래스를 만든다 이 김치찌개 레시피를 라이브러리로 만들어 보자 JAR 위 사진 속 화살표에 JAR file과 Runnable JAR file이 있다 이 둘의 차이점 패키지는 '. java'파일의 모임이다. 이보다 좀 더 큰 개념이 jar이다 jar는 패키지의 모임이다. java 파일을 포맷하는 java achaive(아카이브) 파일이다. 즉 여러 패키지..

JAVA,객체지향 2021.11.09

JAVA/일반변수와 레퍼런스(참조) 변수

변수의 선언과 초기화 - 변수의 선언 : 타입 변수; (ex: int num;) - 변수의 초기화(메모리 할당) : 타입 변수 = 값; (ex: int num = 10); 일반 변수와 레퍼런스 변수 - 일반 변수는 값을 가지고 있다. 컴파일 시점에 크기가 정해져 있다. (ex: int처럼 크기가 정해진 것) - 레퍼런스 변수는 주소값(4바이트)을 가지고 있다. 컴파일 시점에 크기를 알 수 없고 런타임에 알 수 있다. - 주소는 힙메모리 내 주소다. 일반 변수와 달리 주소 값(포인터)을 통해 재차 찾아가야 하므로 액세스가 2번 발생한다. 레퍼런스 변수 예시 - class MyData { int num; String name; } 로 예시 - 변수의 선언 : MyData myData; - 변수의 초기화(메모..

JAVA,객체지향 2021.10.27