프로그래밍 80

스레드란?

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

JAVA,객체지향 2021.12.01

추상클래스

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

JAVA,객체지향 2021.11.26

오버라이딩

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

JAVA,객체지향 2021.11.25

다형성

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

JAVA,객체지향 2021.11.21

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

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

JAVA,객체지향 2021.11.21

자료형이란?

자료형이란? 물건을 저장하기 위해 창고를 설계한다고 가정해 보자 그럼 마구잡이로 넣을 수 없으니 정리를 위해서 포장을 해야 한다. 포장을 할 때 사과라는 물건을 저장하는데 창고 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

Linux/ACL/권한 응용해서 계정 복구하기

ACL (access control list) - 파일이나 디렉터리의 확장 속성을 만들어주는 기능 setfacl == acl설정 명령어 -m : acl수정 -x : acl삭제 -b : 모든 acl삭제 getfacl == acl 확인 명령어 acl 설정 ex) setfacl -m u:korea:rwx /acl setfacl -m g:korea:rwx /acl setfacl -m o:rwx /acl alc 삭제 ex) setfacl -x u:korea /acl 모든 acl 삭제 ex) setfacl -d /acl acl 확인 ex) getfacl /acl -acl 작업 이전의 기본 속성 정보는 ls명령어 출력 결과와 동일 -acl 작업 이후에는 ls명령어로는 정확히 확인이 안 되기 때문에 getfacl명령어..

LINUX 2021.11.03