★접근 제한자

 

 

입력1:10을 쓰면 바로 입력2: 에서 10이 작성된다.

 

nextInt() 메소드를 사용하고 바로 nextLine()을 사용했을때... 그때 문제가 발생한다
nextInt()만 연속으로 사용하거나
nextLine()만 연속으로 사용할때는 문제가 생기지 않는다.

 

 

레벨은 처음부터 1이므로 20회사냥을하면 2+1을해서 3레벨을 가진다. 최고레벨을 도달했으므로 경험치는 0이 된다.

  

★접근 제한자가 필요한 이유
- 외부에서 변수에 접근을 직접 해서 변수에 값이 잘 못 변경되면 안되는데, 개발자가 실수로 값을 잘못변경했을때
프로그램에 문제가 생길수 있는데 이런 상황에서 접근 제한자를 통해 변수에 접근을 외부에서 못하게 차단한다면
개발자의 실수를 예방할수 있을것이다. 그래서 접근 제한자를 사용하게 됨..

 

변수를 선언한 클래스 말고 다른 클래스 들은 전부 외부
변수를 선언한 클래스 중괄호 안이 내부

 

 

변수를 선언할때 자료형 왼쪽에 private 키워드를 붙이면 그변수는 해당 클래스 안에서만 사용가능 하게설정됨

 

메소드도 외부에서 호출되면 안되는 상황이 존재함. 메소드를 외부에서 호출해서 프로그램에 결과가 원하지 않는
이상한 결과가 만들어질수 있음. 해서 메소드도 접근 제한자를 통해 외부에서의 접근을 차단하게됨.

 

메소드에 리턴타입 왼쪽에 private 키워드를 작성하면 해당 메소드가 외부에서 사용할수 없게된다.

즉 메소드 정의 된 그 클래스 내부에서만 사용할수 있게됨
그럼으로써 외부 호출시 문제가 될수 있는 상황을 예방 할수 있게 됨.

 

 

//# 전화번호부 프로그램을 아래 요구조건을 충족하여
//만드시오.
//
//@ Phone 클래스
//1. 이름(name), 전화번호(phoneNum) 필드를 가짐.
//    (모두 문자열로 저장)
//2. 객체 생성시 이름은 반드시 지정하게 끔 강제화 하시오.
//3. getter 및 전화번호 변경을 위한 setter를 추가하시오.
//4. A라는 패키지에 소속시키시오.
//
//@ PhoneBookManager 클래스
//1. 해당 객체에서 Phone 객체를 사용하여 최대 3명의
//전화번호를 저장할 수 있게 구현하시오.
//2. 사용자에게 이름을 입력받을 때 exit라고 입력 받으면 입력을 중단하게
//구현하시오.
//3. 사용자가 입력한 전화번호부의 개수 만큼 Phone 객체를 생성하시오.
//    (사용자가 이름과 연락처를 2개 입력하면 Phone 객체 2개 생성하고,
//     사용자가 이름과 연락처를 3개 입력하면 Phone 객체 3개 생성....)
//4. B라는 패키지에 소속시키시오.

 

 

 

★접근제한자 종류
-private :동일한 클래스에서만 접근 가능
-public :어디서든지 접근 가능
-default :동일한 패키지 내에서만 접근 가능 //아무것도 안적는거 설정
-protected :동일한 패키지 내에서만 접근 가능한데 예외적으로 해당 클래스를 상속받은 클래스는
다른 패키지여도 접근 가능 (거의 안씀)

 

default 접근 제한자는 변수를 선언할때 또는 메소드를 선언할때 접근 제한자를 지정하지 않고 생략했을때 설정됨

 

★클래스 접근 제한자
-public : 어디서든지 접근 가능
-default : 동일한 패키지 접근 가능

 

소스파일에 이름과 동일한 이름에 클래스가 기본 클래스임
기본 클래스가 접근 제한자가 이클립스가 자동으로 public 접근 제한자를 붙이지만 꼭 기본 클래스의 접근 제한자가
public이여야 하는것은 아니다.

 


 

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA/ 생성자,오버로딩,오버라이드  (0) 2017.07.11
JAVA/ random,Array  (0) 2017.07.08
JAVA/ Class  (0) 2017.07.05
JAVA/ 메소드,return,함수  (0) 2017.07.02
JAVA/ 반복문(while,for)  (0) 2017.06.28

각도 관련된것을 알려면 삼각함수를 알아야 한다.

 

radian - 호 도 법  - 각의크기를 나타내는 방법(각도의 단위)

 

★각도(육십분법)      실수(호도법)

180도                            파이

90도                           2분의 파이

60도                           3분의 파이

45도                           4분의 파이

30도                           6분의 파이

120도                         3분의 2 파이

150도                         6분의 5 파이

300도                         3분의 5 파이

2분의 3 파이(호도법)   270도(육십분법)

 

 

 

 

각도를 구하는 FPS총게임 등 만들수 있다.

 

육십분법 출력 값  = 8.085580866682552

 

 

 

출력값 - 53.13010235415598

 

 

 

★nmap 보안 스캐너 사용

- 해커들은 주로 해킹을 위해 목표가 되는 서버의 정보를 수집(os종류, 버전, 운영 서비스 ,오픈된 서비스 포트)

 

★MITF 설치

git clone https://github.com/byt3bl33d3r/MITMf.git

 

git으로 소스를 가져와서 mitmf를 실행하면 실행이 안된다.

밑에 apt-get으로 따로 다 설치를 해주어야 된다.(의존성 설치)

 

apt-get install python-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev

libxml2-dev libxslt1-dev libcapstone3 libcapstone-dev libffi-dev file

 

설치가 끝나고

 

apt-get install git -> mitmf 폴더안에 있는 requirements.txt  pip install -r requirements.txt  (필요한 모듈)

 

 

다시 실행해봤지만 bdfactory 모듈이 없어서 다시 해야된다.

 

bdfactory경로에 git clone https://github.com/secretsquirrel/the-backdoor-factory.git

설치하고 다시 mitmf 를 실행하면 실행이 된다.

 

 

★메일 계정 해킹하기

 

 

-i = 인터페이스

--spoof = DNS스푸핑

--arp = ARP스푸핑

--hsts = ssL stript

gateway 공유기 주소 타겟 피해자

 

ARP스푸핑 = 공격은 MAC 주소 를 속여 RAN 상에서 통신 흐름을 왜곡시키는 공격 방법이다

mac = 근거리 통신망의 물리적 주소

 

이제 윈도우pc7으로 가서 인터넷을 접속한다.

아무 로그인창을 가서 로그인을하면 칼리리눅스에 키로거처럼 나오게 된다.

 --jskeylogger 옵션 추가

 

 

★웹사이트의 모든 이미지 거꾸로 만들기

 

 

--upsidedownternet - 거꾸로 나오게

 

 

 

거꾸로 나오는거 확인할수 있다.

 

--screen --interval 10  추가하면 10초에 한컷씩 저장.

 

 

사진이 저장된것을 볼수 있다.


 

 

 

★어나니머스가 한국의 대학교 6곳을 해킹했다.

 

국제적인 해커 조직 어나니머스 소속이라고 주장한 미니언 고스트는 트위터를 통해 한국의 6개 대학을 해킹하고 데이터베이스를 유출했다고 밝혔다. 카이스트의 경우 최초에 도메인 서버 한곳이 해킹된후 해당 데이터 베이스의 개인정보가 노출된 것으로 알려졌으나 본지가 카이스트에 확인한 결과 카이스트 내부 사이트가 아닌것으로 밝혀졌고 미니언 고스트가 텍스트 파일 공유사이트 페이스트빈 을 통해 공개한 자료를 보면 이메일주소 비밀번호 전화번호가 공개되어있는데 카이스트측은 추정되는 내용은 드러난바가 없다고 한다. 페이스트빈에 공개한 자료 크기는 총 9.82KB에 불과해 일부만 해킹한것으로 보인다.

현재 고려대학교는 서브도메인에 대해 모두 ip를 차단한 상태로 접근이 불가능하다고 밝혔다.

미니언 고스트는 트위터에 오프코리아2017라는 해시태그를 썼는데 한국을 겨냥한 사이버 테러 작전을 의미

어나니머스는 이스라엘을 대상으로 펼친 디도스 공격등 사이버테러 작전 당시 오프이스라엘이라는 태그를 썼다.

오프는 작전을 뜻하는 오퍼레이션을 줄인말이다.

 

★지인 전화번호로 동영상 확인 유도하는 스미싱 유포

 

여^기^에 너^ 이상한 동^영상^ 있^ 단어마다 ^ 표시가 있는데 스미싱 문자에서 주로 발견되는 특수문자이다.

모바일 백신에서의 탐지나 스팸문자 처리를 피하기 위한 수법이다. 성공률을 높이기 위해 지인을 사칭해 보내는 수법으로

한층 진화했다.

 

스미싱은 문자메시지 와 피싱의 합성어로 인터넷 접속이 가능한 스마트폰 문자메시지를 악용해 개인정보를 탈취하는 행위. 웹사이트를 클릭하면 악성코드가 깔리게 된다.

 

★SQL 인젝션 공격을 모바일에서 가능케 해주는 툴 등장

 

SQL인젝션 공격이란 웹 어플리케이션 자체의 버그를 이용하는 웹 해킹 방법이다.

최근 보안 전문 업체 레코디드 퓨처는 최근 이 SQL인젝션 취약점을 노리는 새로운 공격툴을 발견하기 까지 했다.

이 툴이름은 카추샤 스캐너 인데 오픈소스 침투 테스트 툴인 아나키 스캐너 에다가 텔레그램이라는 클라우드 기반

암호화 통신 메시지 앱을 결합한것 이라고 한다. 이둘의 효과는 넓은 범위를 스캔할수 있다는 거고 모바일 기기만으로도

이러한 공격을 할수 있다는 것이다.

SQL 인젝션 취약점이 꾸준히 발생하는 이유는 완전히 고치기가 쉽지 않고 시간이 꽤걸린다는 특성과 어플리케이션

개발에 익숙하지 않은 새내기들이 끊임없이 새로운 SQL취약점을 추가시킨다는것.

해커입장에서 공격하기 아주 쉽게 웹사이트가 만들어져 있다고 한다.

 

★범죄도 서비스다 신종 랜섬웨어 시프르 등장

 

서비스형 랜섬웨어(RaaS)를 통해 신종 랜섬웨어 시프르가 유포되고 있어 우려된다.

RaaS는 돈을 주면 랜섬웨어를 제작 관리해주는 서비스로 전문가가 아니더라도 랜섬웨어를 뿌릴수 있기 때문이다.

시프르에 감염되면 파일 확장명에 shifr라는 문자열이 추가되고 바탕화면에 'HOW_TO_DECRYPT_FILES.html'라는

파일이 생성된다. 기존 랜섬웨어와는 다르게 파일이 암호화됐다는 메시지와 함께 파일 복구를 위한 안내페이지에

접속할것을 요구하는 내용이 담겨있다. 익명으로 인터넷을 연결하는 가상네트워크 토르에 존재한다.

이페이지는 복호화 프로그램 다운로드 버튼을 제공하고 있다.

시프르 랜섬웨어 제작 서비스 사이트는 비트코인을 받을주소와 요구 금액, 캡챠등 세가지 정보를 요구 사용자가

사람인지 구분하는 용도인 캡챠를 제외하면 서비스 제공자가 요구하는 정보는 사실상 두개다.

 

'개인 학습 > 보안의 길' 카테고리의 다른 글

보안뉴스/ 170711  (0) 2017.07.11

★소스 이용해서 토끼 게임 만들기

 

게임 소스 https://www.raywenderlich.com/

pygame을 검색한다.

 

 

 

here 을 눌러 다운로드 파일을 프로젝트 폴더에 넣는다.

 

파이참에서 새파일을 만들어준다.

 

 

from pygame.locals import * 필요한 라이브러리 를 쓸수 있다. 보통 이렇게 사용한다.

게임 루프 while문

 

#Import library
import math #회전 함수
import random
import pygame
from pygame.locals import *

#초기 게임설정
pygame.init()
pygame.mixer.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("동동 이미지")
#속도 제어
FPS = 50
fpsClock=pygame.time.Clock()

#키 입력 체크
keys = [False, False, False, False]
#플레이어 버니 위치
playerpos = [100, 100]
#화살 발사 횟수
acc = [0, 0]
#화살 각도
arrows = []
#적생성
badtimer = 100
# badtimer만큼 줄인다.
badtimer1 = 0
#적 좌표 리스트
badguys = [[640, 100]]
healthvalue = 194

# Load images
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
arrow = pygame.image.load("kakao_mu.png")
badguyimg1 = pygame.image.load("resources/images/badguy.png")
badguyimg = badguyimg1
healthbar = pygame.image.load("resources/images/healthbar.png")
health = pygame.image.load("resources/images/health.png")
gameover = pygame.image.load("resources/images/gameover.png")
youwin = pygame.image.load("resources/images/youwin.png")

#Load audio
hit = pygame.mixer.Sound("resources/audio/explode.wav")
enemy = pygame.mixer.Sound("resources/audio/enemy.wav")
shoot = pygame.mixer.Sound("resources/audio/shoot.wav")
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load("FIVE.mp3")
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)

# keep looping through
running = 1
exitcode = 0
while running:
# 5 - clear the screen before drawing it again
screen.fill(0)

#잔디를 그린다.
for x in range(width//grass.get_width()+1): #잔디 100픽셀 (5)
for y in range(height//grass.get_height()+1):
screen.blit(grass, (x*100, y*100))

#성을 배치
screen.blit(castle, (0, 30))
screen.blit(castle, (0, 135))
screen.blit(castle, (0, 240))
screen.blit(castle, (0, 345))
# 6.1 - Set player position and rotation
position = pygame.mouse.get_pos()
angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))
playerrot = pygame.transform.rotate(player, 360-angle*57.29)
playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
screen.blit(playerrot, playerpos1)
# 6.2 - Draw arrows
for bullet in arrows:
index = 0
velx = math.cos(bullet[0])*10
vely = math.sin(bullet[0])*10
bullet[1] += velx
bullet[2] += vely
if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
arrows.pop(index)
#화살을 그려주고 제거하는 역할
index += 1
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
# 6.3 - Draw badgers
if badtimer == 0: #적이 0이 될때 생성
badguys.append([640, random.randint(50, 430)])
badtimer = 100 - (badtimer1 * 2)
if badtimer1 >= 35:
badtimer1 = 35
else:
badtimer1 += 5
index = 0
for badguy in badguys:
if badguy[0] < -64:
badguys.pop(index)
badguy[0] -= 7
# 6.3.1 - Attack castle
badrect = pygame.Rect(badguyimg.get_rect())
badrect.top = badguy[1]
badrect.left = badguy[0]
if badrect.left < 64:
hit.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
# 6.3.2 - Check for collisions
# 충돌 체크
index1 = 0
for bullet in arrows:
bullrect = pygame.Rect(arrow.get_rect()) #적을헤치우는 좌표
bullrect.left = bullet[1]
bullrect.top = bullet[2]
if badrect.colliderect(bullrect):
enemy.play()
acc[0] += 1
badguys.pop(index)
arrows.pop(index1)
index1 += 1
# 6.3.3 - Next bad guy
index += 1
for badguy in badguys:
screen.blit(badguyimg, badguy)
# 6.4 - Draw clock
# 시계
font = pygame.font.Font(None, 24)
survivedtext = font.render(str((90000-pygame.time.get_ticks())//60000)+":"+str((90000-pygame.time.get_ticks())//1000%60).zfill(2), True, (0,0,0))
textRect = survivedtext.get_rect()
textRect.topright = [635, 5]
screen.blit(survivedtext, textRect)
# 6.5 - Draw health bar
screen.blit(healthbar, (5, 5))
for health1 in range(healthvalue):
screen.blit(health, (health1 + 8, 8))
# update the screen
pygame.display.flip()
fpsClock.tick(FPS)
# loop through the events
for event in pygame.event.get():
#키를 누를때
if event.type == KEYDOWN:
if event.key == K_w:
keys[0] = True
elif event.key == K_a:
keys[1] = True
elif event.key == K_s:
keys[2] = True
elif event.key == K_d:
keys[3] = True
#키를 뗄때 동작이 자동으로 멈춘다.False
if event.type == KEYUP:
if event.key == K_w:
keys[0] = False
elif event.key == K_a:
keys[1] = False
elif event.key == K_s:
keys[2] = False
elif event.key == K_d:
keys[3] = False
if event.type == QUIT:
# if it is quit the game
pygame.quit()
exit(0)
if event.type == MOUSEBUTTONDOWN:
shoot.play()
position = pygame.mouse.get_pos()
#화살 증가 횟수
acc[1] += 1
arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])
# 9 - Move player
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
badtimer -= 1
# 10 - Win/Lose check
if pygame.time.get_ticks() >= 90000:
running = 0
exitcode = 1
if healthvalue <= 0:
running = 0
exitcode = 0
if acc[1] != 0:
accuracy = acc[0]*1.0/acc[1]*100
else:
accuracy = 0

# 11 - Win/lose display
if exitcode == 0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (255, 0, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(gameover, (0, 0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (0, 255, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(youwin, (0, 0))
screen.blit(text, textRect)

while 1:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit(0)
pygame.display.flip()

 

 

음악이랑 이미지 확인

 

★이미지 보여주기

 

이미지한장을 구해 파이참 프로젝트 폴더 에 넣어준다.

 

 

display_width 와 display_height 나중에 값을 편하게 바꿀수있게 변수를 지정해준다.

보여줄 이미지 업로드 이미지 파일 이름을 넣어준다.

mying이라는 함수를 만들어준다.

스크린에 이미지가 보여줘야하므로 blit 을 사용한다. x,y는 이미지 위치지정

끝나지 않았다면을 설정해주고 이벤트를 만들어준다.

fill은 스크린 색상.

mying(x,y) 이미지 위치

pygame.display.flip() 이 업데이트 코드가 없으면 코드 출력이 안된다.

 

pygame.quit()

quit() 두줄은 없어도 무방하다.

 

pygame.display.set_caption("동동 이미지")

- 이코드를 넣으면 윈도우창 이름 동동 이미지


★음악넣기

 

음악 파일을 파이참 프로젝트 폴더에 넣어준다.

 

pygame.mixer.music.load 에는 음악 파일 이름

mixer를 빼면안된다. 모듈이다.

 

play(0)은 한번 재생이고 무한대로 재생하고 싶으면 (-1)

 

 

창이 뜨자마자 음악이 나오게된다. 음악재생!!!

 

 

new키워드로 클래스를 인스턴스화 시켰을때 무조건 생성자를 호출
만약 생성자가 없다면 인스턴스화 못함

 

근데 개발자가 클래스를 정의할때 생성자를 정의하지 않으면 자동으로 생성자가 만들어진다.

 

개발자가 생성자를 정의하지 않았을때 자동으로 만들어지는 생성자를 기본 생성자라고함

 

기본 생성자는 아무 매개변수도 받지 않고 아무 로직도 수행하지 않음

 

this?- 객체 자기 자신을 지칭

 

 

결과는 출력! 이렇게 나온다.인스턴스화

 

 

생성자 실행

출력!

 

 

문자열을 받아서 동현님 환영해요.

출력!

 

 

전역변수를 주석처리하면 this로 선언된 a,b 에러 표시.

합: 57

 

 

- super(a,b);대신에 this.a=a; this.b=b;가 들어가도 무방하지만 중복되는거 해결.

 

기본 생성자는 아래와 같은 형태로 만들어 진다
public calc(){}

 

생성자를 개발자가 직접 정의하지 않았을때 기본 생성자를 만들지만 개발자가 직접 생성자를 정의 했으면
기본 생성자는 안만들게 됨.

 

상속을 받으면 자식 클래스가 부모 클래스의 기본 생성자를 호출하게 됨. 근데 부모 클래스에 기본 생성자가 없으면 에러가 발생
이를 해결하기 위해서는 부모클래스에 안만들어진 기본생성자를 개발자가 직접 정의하면 에러를 해결할수 있음.

 

인스턴스화를 시킬때 그 클래스가 상속을 받고 있다고 해서 인스턴스화 시킬때 실행하는 생성자가 부모 클래스의 생성자를 호출하는 것이 아니라 인스턴스화를 하는 그 클래스의 생성자를 호출하는 것.

 

부모 클래스의 생성자의 코드와 자식 클래스의 생성자의 코드가 중복되는 것을 쉽게 해결할수 있음.
super(a,b);
-매소드는 부모 클래스의 생성자를 호출하는 메소드
-a,b에 있는 값을 부모 클래스의 생성자한테 전달해서 호출

 

★문제 로또

 

 

배열 6개를 담는다. 1~45개 랜덤 표현. 같은거 중복 제거 표현

 

 

 

★오버라이딩: 부모 클래스에 정의 되있는 메소드를 자식 클래스에서 코드를 다시 작성하는것
 - 메소드를 재 정의 한다고 표현


부모 클래스에 생성자를 직접 정의해서 기본 생성자가 안만들어졌을 경우 에러가 발생하기 때문에 기본 생성자를 개발자가직접 정의 해야하는데 만약 자식 클래스에 생성자에서 super()메소드를 사용해서 부모 클래스의 생성자를 호출한다면 부모 클래스에서 기본 생성자가 없어도 에러가 안남.

super???- 상위 클래스의 생성자를 호출 할 때 사용 (= 부모 클래스의 생성자 호출)


오버 라이딩을 진행하는 첫번째 이유 다른 사람이 만든 클래스를 내가 가져다가 쓰는데 그클래스에 정의 된
메소드가 마음에 안들어서 수정을 하고 싶은때 그 클래스를 직접 수정하면 실수로 잘못건들여서 클래스가 엉망이 되지만. 아무 클래스를 하나 만들어서 상속을 받은 다음에 마음에 안드는 클래스를 다시 만들기 위해서 오버라이딩 진행함
 
자식 클래스가 여러개 만들어져 운영 되는데 그 여러 자식클래스 중에 하나의 클래스가 부모가 가지고 있는 메소드를 약간 변형해서 사용해야 하는 경우에 오버라이딩을 통해 재정의 해서 이해하게 됨
 
오버라이딩을 해서 다른 자식 클래스한테 영향이 생기지 않는다
 - 내클래스에서만 변형해서 쓰인다.

오버라이딩의 제약조건
public int sum(){ 에러
리턴 타입이 바뀌면 안된다.
매개 변수의 개수가 다르면 안됨.
매개 변수의 자료형이 다르면 안됨.

 

 

 

 

@Override <- 오버라이드 어노테이션이라 칭
오버라이드 어노테이션은 아래에 메소드가 오버라이드를 하는것임을 나타낼때 사용
 
어노테이션을 안붙여도 오버라이드를 할수 있음.
어노테이션을 붙이면 가독성이 향상. 딱보면 이메소드를 오버라이드하는거 구나라고 분석하기 용이

 

오버라이드 어노테이션을 붙이면 아래 메소드가 오버라이드 제약조건이 충족이 되는지 확인함 그리고
충족 안되면 에러를 발생시켜줌

 

어노테이션을 붙여서 에러를 잡아 줌으로써 문제가 생기는 것을 감지 할수 있게 됨.
 
★오버로딩
- 동일한 이름에 메소드를 만드는것

 

오버로딩의 제약조건
-매개변수의 개수가 다르다
-매개변수의 개수가 똑같다고 하더라도 매개변수의 자료형이 다르면 오버로딩 조건이 충족됨.

 

매개변수의 개수가 똑같고 대신 매개변수의 자료형도 똑같은데 매개변수의 이름이 다르다고 오버로딩 조건이 충족되지 않음

 

매개변수의 개수나 자료형이 다르다면 오버로딩할때 리턴타입이 다른걸로 바꿔 사용할수 있음.

 

 

메소드 2개를 만들어 두수의 합과 세수의 합을 알수 있다.

 

 

초기값을 지정해주고 메소드를 같게 오버로딩을 만들고 sum메소드 통틀어 수의 합으로 간결하게 바꾼다.

 

this.val1=val1 과 this.val2=val2가 같으므로

 

 

setter로 묶어서 표현해준다.

 

 

 

3번 4번이 출력된다. 4번 int 0으로 해줘서 4번이 출력

 

오버로딩을 통해 매개변수에 따라서 다른 처리가 진행될 수 있게 구현

 

setter() 메소드를 오버로딩 해서 매개 변수 2개 넘어왔을 때와 3개 넘어왔을때를 다른 로직을 수행하게 처리 했음.

 

부모 클래스에서 오버로딩 된 메소드를 자식에서 오버라이딩시킬수 있음. . 즉 재정의 가능.

 

자식 클래스에 만든 메소드의 이름과 동일한 메소드가 부모 클래스에 매개변수의 개수와 자료형이 동일한게 있다면 그건 오버라이딩 즉 재정의하는것이고 없다면 오버로딩을 하는것

 

★패키지?
- 여러 소스파일을 묶음화 하는 용도로 사용되게 됨
- 여러 클래스를 묶음화 하는 용도로 사용됨.

 

소스파일이 패키지에 그룹화를 하기 위해서는 소스파일에  package korea1; <-해당소스파일이 어느 패키지
소속인지를 지정해 놓어야함
package korea1; 이파일은 korea1이라는 패키지에 소속됬음을 뜻

 

이클립스에서 소스파일을 만들면 자동으로 소스파일에 내용에 해당 파일이 어느패키지에 소속됐는지를
자동으로 삽입해 놓습니다. package korea1;이런키워드(자동)

 

1. 패키지를 사용하는 첫 번째 목적은  이름 중복을 해결하기 위함.
소스파일에 이름은 절대 똑같을수 없음. 하지만 패키지가 다르다면 소스파일에 이름이 동일해도됨
해서 패키지를 사용함으로써 이름중복에 문제를 해결  <-장점

 

ex)A B회사가 공동으로 프로그램 제작 A회사 에서 만든 소스파일에 이름과 B회사에서 만든 소스파일에 이름이 똑같아질
가능성이 충분히 있음
하지만 패키지에 이름이 다르게 만들면 A회사에서 만든 소스파일에 이름과 B회사에서 만든 소스파일에 이름이 똑같아도 충돌
나지 않음

 

2. 의미가 비슷한 소스파일,기능이 비슷한 소스파일을 한대 묶음화를 해서 관리하기 위해 패키지를 쓰게됨
패키지를 통해 비슷한 소스파일들을 묶어서 관리함으로써 관리 효율성이 증대.

동일 패키지에 존재하는 클래스는 접근 가능하지만, 기본적으로 다른 패키지에 있는 클래스는 접근이 안됨
하지만 접근할수 있게 만드는 방법이 존재.

다른 패키지에 있는 클래스를 사용하기 위해서는 그 사용할 클래스를 내 소스파일로 가지고 와야함..
import 키워드를 통해 다른 패키지에 있는 클래스를 내소스파일로 가지고 올수 있음.

패키지 안에 그 패키지를 만들고 계속 안에 패키지를 하위로 만들수 있음.
import korea2.*; 모든 클래스를 import
 

 

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA/ 접근 제한자  (0) 2017.07.23
JAVA/ random,Array  (0) 2017.07.08
JAVA/ Class  (0) 2017.07.05
JAVA/ 메소드,return,함수  (0) 2017.07.02
JAVA/ 반복문(while,for)  (0) 2017.06.28

★케르베르 이어 메트릭스 램섬웨어 귀환! 웹 통해 피해 확산

 

96 시간 이후엔 복구 불가능 매 12시간마다 100달러씩 가격 인상협박

악성 코드가 숨겨진 웹사이트에 방문만 해도 감염되는 드라이브 바이 다운로드 방식으로 피해를 확산시키는

매트릭스 랜섬웨어. 웹사이트 접속만으로 감염 주의.

랜섬웨어의 악성코드 유포 공격도구인 '선다운' 익스플로잇 킷

기존의 다른 랜섬웨어들과는 다르게 암호화된 파일의 확장자를 변경하지는 않는것으로 분석.

 

 

★가상화폐 이더리움에 해킹 공격 발생해 3억원 사라져.

 

요즘 가상화에 관심이 쏠리고 있다. 사람들이 몰리는곳엔 해커들도 몰리는 법.

이더 월렛은 이더리움 클래식(ETC)이라고 암호화 화폐의 클라이언트 사이드 지갑 시스템이다.

공격자는 자기가 그도메인의 소유자라 밝혔고. 담당자를 속이는데 성공하며 여러정보를 캐내었다. 이공격자는

환경설정을 바꾸고 악성서버로 만들었다. 누군가 지갑에서 거래를 시작하면 토큰이 받아야 할사람에게 가는게 아니라

공격자의 손에 들어간다. 이것은 피싱 공격의 일종. 공격은 하루밤 만에 해결이 되었고 하루동안 이더월렛 접속한

사용자는 비밀 키를 도단당했고 돈이 빠져나갔다.

 

 

★가상화폐 '비트코인' 열풍 편승한 이메일 해킹 공격 출현

 

비트코인 거래 업무를 보는 법인 대표를 대상으로 스피어 피싱 공격이 발생

스피어 피싱공격은 특정대상으로 이들의 개인정보를 캐내기 위한 피싱공격 물고기를 낚시에 빗댄것이다.

비트코인 관련 내용을 포함한 악성파일이 이메일에 첨부되어 특정인에게 보내지는 공격이다.

악성 문서를 악용한 사례로 악성문서는 word/media 하위 경로 'image1.eps'파일이 포함되어 있는것으로 드러났다.

어도비 포스트스크립트 언어에서 사용하는 그래픽 파일 포맷으로 캡슐화된 형태를 통해 특정개체 내에 삽입이 가능하다.

악성 포스트스크립트는 4바이트의 특정 코드로 xor암호화가 되어있으며 복호화가 이러지면 명령어들을 육안으로 확인이가능하다.

한글 문서파도 워드 문서와 동일하게 'BIN0002.PS'코드 내부에 포스트스크립트 코드가 포함되어 있지만 한글 문서의 경우

Zlib코드를 해제하면 내부를 볼수 있는데 코드내부에는 악성exe파일을 생성하고 시작프로그램에는 'android.exe'파일명으로 등록

악성 워드 문서와 한글 문서 모두 명령을 수행하는 코드와 SNI(Servere Name Indication)값을 도메인중 하나로 사용하도록

설정하는 방식등이 동일해 같은 해커조직에 의해 제작됐을 가능성이 높다는 분석결과다.

이 사례는 모두 비트코인 도메인을 포함하고 있다.

모르는 사람이 보낸 메일은 삭제하는것이 바람직하다.

 

포스트스크립트??- 어도비에서 개발한 그래픽을 위한 페이지 기술언어(PDL)

xor암호화??- 텍스트 파일의 내용을 아스키코드로 바꾸고 각 바이트를 비밀키의 값으로 시키는것

SNI??- 서버명 지정. TLS(transport layer security) 프로토콜의 확장형.

TLS??- 클라이언트/서버 비밀이 유지되고 안정적인 통신도와준다.

 

★신분 도용으로부터 보호하는 방법

 

공공장소에서 wifi연결을 통한 해킹 건수가 늘어남에 따라 사기로 부터 보호할수 있는 팁이 공개 되었다.

웹사이트 주소가 http로 시작하는지 확인.

온라인 뱅킹 사이트 https는 사용자 브라우저와 접속한 사이트 사이에 데이타 전송방식인 http의 보안이 강화된 버전.

 

★소셜 로그인 개인정보 유출 위험성 크다

 

스마트폰에서 간단한 탭 한번으로 앱을 로그인할수 있다. 어떤앱은 나이 생년월일 전화번호등을 요구한다.

사용자는 세부정보를 입력하거나 구글,페이스북,트위터같은 소셜네트워크에서 이미사용중인 데이터를 해당앱이 사용할수

있도록 허용할수 있다. 이런과정을 소셜 로그인이라 부른다

스마트폰 사용자는 수동으로 계정을 입력하고 사이트마다 암호를 기억하는 번거로움을 피하기 위해 소셜로그인을 사용한다.

하지만 구글또는 페이스북계정이 해킹당하면 문제가 발생할수 있다.

로그인을 위한 별도의 비밀번호가 없어서 소셜네트워크와 연동된 앱도 해킹당할수 있다.

되도록 회원가입해서 쓰는게 좋을거 같다.

 

★무료 와이파이 대가는 개인정보

 

페이스북의 최신 기능인 와이파이찾기는 전 세계 사용자들이 무료 와이파이 접속을 하도록 도와준다.

하지만 두가지 사항을 고려해야 한다.

첫번째는 사생활 문제. 이기능을 사용하려면 스마트폰의 gps 위치 데이터 권한을 페이스북에 부여해야하며 이것은 앱을 사용

하지 않을때도 추적이 가능. 모든 장소를 감시 할수 있다  엄청난 배터리 양을 사용하게 된다.

두번째는 보안이다. 안전하지 않은 무선네트워크에 연결하는 것은 위험할수있어 사이버 위협및해커에 더취약하게 만든다.

'개인 학습 > 보안의 길' 카테고리의 다른 글

보안뉴스/ 170716  (0) 2017.07.16

 

 

 

안에 제품들은 플라즈마 전원장치 이며 제가 3d cad로 그린 것들 입니다.

 

static 키워드에 this는 에러가 난다.

어떤 메소드가 만들어져 있는 전역변수를 가져다가 사용할때 그 전역변수가 setter메소드를
통해 값이 초기화가 진행이 된 후에 메소드가 호출되어야 되는데 실수로 세터 메소드를 통해 변수에 값을 초기화하지
않고 전역변수를 가져다가 쓰는 메소드를 호출해 버릴수가 있다. 실수가 발생될수 있다.

 

 

setter메소드를 만들어 놨을때 setter메소드를 호출하는 것을 개발자가 깜빡하고 잊어버리는 일을 예방하기 위해서
생성자라는 것을 사용할수 있다.

 

생성자는 클래스를 new 키워드를 통해서 인스턴스화 시켰을때 자동으로 실행되는 메소드를 생성자라고 한다.

 

생성자의 실행은 강제다. 자동으로 실행되고 무조건 실행

 

void 리턴x 생성자를 정의할때는 리턴타입을 지정할수 없다.
즉, public void <-에러
public int <-에러

 

생성자를 만들때는 클래스 이름과 반드시 같게 만들어야한다.

 

클래스를 인스턴스화를 진행할때
즉 new할때 만들어져 있는 생성자를 호출


Calc c1 = new Calc(); <-에러
생성자가 매개변수를 받겠다고 했는데 매개 변수를 안넘겨 주면 에러가 발생

 

생성자를 setter 용도로 사용

 

생성자를 변수의 값을 초기화하는 setter용으로만 사용해야하는 것은 아니다

 

생성자는 인스턴스화가 되자마자 실행할 로직이 있을때 사용하면 됨

 

 

int re = (int) Math.random() <- (int) 캐스팅 자료형을 int로 바꾸겠다
Math.random() 메소드는 0부터 1사이에 있는 실수를 리턴해주는 메소드
즉 0.000000~0.999999 리턴  자료형은 double

 

int re = (int) Math.random()
실수인 값을 정수형 자료형인 int로 형 변환을 시키면 소숫점 이하가 전부 짤림.
해서 Math.random()메소드의 리턴값을 int 형변환 하면 소숫점이하 짤림 그래서0만나옴

 

 

Math.random() 메소드를 통해 랜덤으로 뽑을 숫자를 0.0~0.9가아니라 0.0~9.9가 되게 만들기 위해선 어떻게?
곱하기 10 double형
0~9를 만들고 싶으면 int 자료형으로 진행

 

 

0~9 +40을 하니까 40~49 까지 출력

 

 

코드가 맞는코드인지 if로 40미만 50초과 있는지 확인해보기

 

 

 0~2 랜덤 출력

 

 

배열에 있는 정수를 정렬 시킬수 있다.
Arrays.sort(arr); 이메소드는 매개변수로 배열을 넘길수 있음 반드시 넘겨야함
그 배열에 있는 모든 값을 정렬시켜준다.

 

 

 

★클래스 상속
클래스끼리 부모와 자식관계를 맺을수 있음
자식 클래스는 부모 클래스에 정의 되 있는 멤버를 사용할수 있게 됨
멤버? 변수나 메소드

 

상속이라는 것은 다른 클래스에 만들어져 있는 멤버를 사용할수 있게 만드는 기술

 

★문제 실습

 

1. //# 가위바위보 게임을 만드시오. 아래 요구사항이 충족되게 진행하시오.
    //1. 사용자와 컴퓨터가 가위바위보 게임을 할 수 있다.
    //2. 가위, 바위, 보는 각 각 정수 1, 2, 3으로 처리
    //3. 난수를 발생시켜 컴퓨터가 낸 것을 결정하고 사용자 입력 값과 비교하요 승패를 출력
    //4. 컴퓨터와 사용자가 가위, 바위, 보 중에 무엇을 냈는 지 출력
    //5. 게임은 무한으로 계속 진행되게 구현하는데
    //사용자가 -1을 입력하면 게임이 종료되게 구현

 

2. 합,평균,차,합 출력해보기

 

 

extends Calc <- Calc 클래스 한테 상속 받겠다 라는 뜻
즉,Calc 클래스에 정의 돼 있는 멤버를 사용할수 있게 만들라는 의미.

 

기본적으로 상속을 안받았을 때는 다른 클래스에 있는 멤버를 사용할수 없음.

 

extends Calc <- 부모 클래스로 Calc클래스가 지정됨
extends Calc <- 이키워드를 작성한 클래스는 자식 클래스가됨

 

 

상속을 진행했을때 자식 클래스를 인스턴스화 해서 쓸때 그인스턴스로 자식과 부모에 있는 모든 멤버를

전부 사용할수 있음 그런데 거꾸로는 안됨 부모클래스를 인스턴스화해서 쓸때 그인스턴스로

자식에 있는 멤버를 사용할수 없다..

 

부모가 자식꺼 사용할수 없음
자식이 부모꺼는 사용할수 있음
자식이 자른 자식꺼 사용할 수 없음

 

★클래스 상속의 필요성??
첫번째 이유 - 여러 클래스에서 중복되는 코드가 있을때 그중복되는 코드를 다른 클래스로 분리시킨 후에 그클래스를 상속받게 만들어서 중복 코드를 제거하기 위함.

 

두번째 - 다른 사람이 만든 클래스를 내가 가져다가 사용할때 나는 그 클래스에 대해 정확하게 이해하고 있지 않을때
그 다른 사람이 만든 클래스를 내가 약간 수정해서 쓰고 싶을때가 생김 원하는 변수를 더 추가하고 원하는 메소드를 더추가
해서 사용하고 싶을때 그다른 사람이 만든 클래스를 직접 수정하다가 클래스를 잘못 수정해서 잘 되던것도 안되는경우가
생긴다. 클래스를 하나 만들어서 그 클래스를 다른 사람이 만든 클래스한테 상속 받게 구현한 후에 내가 원하는 코드를
추가하여 사용하게 됨 그럼으로써 다른 사람이 구현한 로직을 잘못 건드는 일을 예방할수 있게됨.

 

부모 클래스의 부모클래스의 부모클래스가 존재할수 있음
부모 클래스는 여러개가 지정될수 없다
자식 클래스는 여러개가 지정될수 있음

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA/ 접근 제한자  (0) 2017.07.23
JAVA/ 생성자,오버로딩,오버라이드  (0) 2017.07.11
JAVA/ Class  (0) 2017.07.05
JAVA/ 메소드,return,함수  (0) 2017.07.02
JAVA/ 반복문(while,for)  (0) 2017.06.28

이전에 배운 K_SPACE 말고 K_1 하면 하면 1번키

UP,DOWN 등등

 

사각형을 움직이게 할려면 기존 사각형을 없애는 코드를 만들어야한다

사각형이 옮겨지면 너무 순식간이라 프레임 설정을 해줘야한다.

속도도 설정해주어야 한다.

 

 

x,y 변수를 지정해 x,y좌표를 설정해 준다.

pygame.time.Clock() 초 설정을 해준다.

 

키를 눌르는 이벤트를 만들어 줘야하므로 pressed라는 변수를 만들어 준다.

몇칸을 옮길지 설정.3칸

사각형이 옮겨지면서 기존의 사각형은 없어져야 하므로 ourScreen.fill fill이라는 옵션사용.

너무 빨리 움직이므로 clock.tick(60)사용.

 

 

★윈도우 창 띄우기

 

★pycharm에서 pygame을 시작할때

 

import pygame

pygame.init()

 

이 두 줄은 반드시 시작해야 한다.

 

윈도우 화면 = 윈도우 서피스라 통칭

 

 

코드 대문자 소문자 문법 주의

pygame.event.get() 끊임없는 이벤트 체크

 

flip - ex) 책장계속넘기 면서 그림이 저절로 움직이는 착시현상

 

★게임 루프 개념 구현

 

핸들 이벤트 - 마우스를 눌르던가 키보드 입력

 

update game state - 게임의 변수들 을 업데이트

 

draw screen - 화면에 보여지는

 

★윈도우 창에 사각형 그리기

 

0,128,255 <-색깔 RGB지정

0,0,60,60 <- 0,0 xy좌표  60,60 사각형 크기

 

이벤트 키는 키 스페이스를 누르면 발생

스페이스를 누르면 블루가 아니다

만약 블루 색상 이면 키보드를 누르면 블루가 아니다

그러면은 하얀색으로 발생

 

'Python > Pygame' 카테고리의 다른 글

Pygame/ 삼각함수 math모듈  (0) 2017.07.19
Pygame/ 토끼 슈팅 게임 만들기  (0) 2017.07.14
Pygame/ 이미지, 음악 넣기  (0) 2017.07.13
Pygame/ 사각형 움직이게 하기  (0) 2017.07.08
Pygame/ pycharm 개발환경 구축  (0) 2017.07.06

 

 

pygame 다운로드 사이트

http://www.pygame.org/download.shtml

 

내가 64비트여도

64비트는 비공식,불안정

32비트는 안정적

 

pycharm 사용 할거면 파이썬이랑 pygame을 32비트로 그리고 둘다 같은버전으로.

pygame-1.9.1.win32-py3.1.msi 3MB

 

Windows x86 MSI Installer (3.1) (sig)

 

pycharm에서는 다른프로그램이 64비트면 안된다.

 

Pycharm

- 자바 이클립스 처럼 파이썬 개발 환경

- JetBrain 님이 개발한 프로그램, 코드분석,그래픽디버깅,통합장치테스트 등의 목적으로 사용되는 프로그램

 

 

pygame 모듈 돌아가는거 확인.

 

pycharm community설치 - https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows

 

 

 

new python file 열어서 파일 생성하고 Alt+shift+F10 pygame 모듈 돌아가는거 확인.

★theharvester  : harvester은 수확기 수확용기계란 뜻으로 구글,Bing 링크등의 검색엔진을 이용해 대상 도메인에 대한 서브 도메인과 이메일, 호스트등에 관련된 정보를 목록화 할수 있다.

 

★터미널

theharvester 검색 도움말

 

 

오늘 실습에선 -d 와 -b 옵션만 사용할것이다.

-d 도메인 검색

-b 데이타 검색 엔진

 

 

gmail.com은 도메인 이름이다. 검색엔진은 구글 밑에 이메일들 발견

theharvester -d gmail.com -b yahoo 를 검색하면 조금 1개 가 나온다.

저 gmail.com이메일 들은 실제 사용자들이기 때문에 실습용으론 사용 할수 없다.

 

★setoolkit 실행

 

social-Engineering Attacks -> maxx mailer Attack(대량 이메일 공격) -> E-Mail Attack Mass Mailer

 

 

1 : 하나의 이메일 주소에 이메일 폭탄 보내기

2 : 여러사람들에게 스팸메일 보내기

 

 

바탕화면에 이메일파일 을만든다. 나는 내가 안쓰는 이메일을 적었다.

html 형식으로 보낼것인가 plain 텍스트형식으로 보낼것인가.

enter the body of the message는 내용쓰기.

스팸메일이 전송되었다.

+ Recent posts