'분류 전체보기'에 해당되는 글 46건
- 2016.07.10 :: LitJSON 파일 있는지 없는지 확인 함수
- 2016.06.07 :: 콘솔게임(오목)만들기. 5
- 2016.06.07 :: [C언어] 파일입출력으로 맵 받아오기.
- 2016.06.07 :: [C언어] 우주선
- 2016.06.07 :: [C언어]배열을 이용하여 맵 만들기.
- 2016.06.02 :: 모욕죄
- 2016.06.02 :: 명예훼손죄
- 2016.06.02 :: 폭행죄
- 2016.06.02 :: 절도
- 2016.06.02 :: 정범 및 공범론
'프로그래밍 > Unity' 카테고리의 다른 글
유니티 VideoPlayer. (0) | 2017.08.03 |
---|---|
unity JsonUtility 사용법. (저장 / 불러오기) (0) | 2016.07.20 |
오브젝트 풀 (0) | 2016.07.15 |
맨 처음 문제가
1. 포인터
2. 동적할당
3. 파일입출력
4. 텍스트 게임 금지(글로만 된 스토리 게임)
필자는 곰곰히 생각하고 하루만에 구현 할 수 있는 쉽고 재밌는 게임인 오목을 만들기로 했다.
또한, 규칙은 복잡하니 단 하나 5개이상으로 연결만 되면 승리 라는 소박한 규칙만 만들었다.
맨 처음으로 Define.h / Define.cpp 를 만들었다. 필자의 프로그래밍 습관이기도 한데 #include XXX 이렇게 계속 선언할 것을 그냥 헤더파일 하나로 모았다.
// Define.h
#pragma once
#include<iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;
void gotoxy(int x, int y); // 이동을 지시해 줄 함수
enum { LEFT = 75, RIGHT = 77, UP = 72, DOWN = 80, SPACE = 32 };
// Define.cpp
#include"Define.h"
void gotoxy(int x, int y)
{
COORD Pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
그 다음 게임을 만들기 위해서 이동을 해야되지 않겠는가? 필자는 CPoint.h / CPoint.cpp로 그리는 함수, 움직이게 키를 받는 함수, 승리 조건 체크 함수를 만들었다.
// CPoint.h
#pragma once
#include"map.h"
class CPoint : public MAP
{
int x; // x좌표
int y; // y좌표
public:
CPoint(int x, int y); // 생성자
void screen(); // 그리는 함수
void input(int &p); //키를 입력 받는 함수
bool check(int &p); // 승리 조건 체크 함수
};
// CPoint.cpp
#include"CPoint.h"
CPoint::CPoint(int x, int y)
{
this->x = x;
this->y = y;
}
void CPoint::screen()
{
system("cls");
for (int j = 0; j < Get_height(); j++)
{
for (int i = 0; i < Get_width(); i++)
{
if (xy[j][i] == 1)
cout << "★";
else if (xy[j][i] == 2)
cout << "☆";
else if (xy[j][i] == 0)
cout << "╋";
}
cout << "\n";
}
}
void CPoint::input(int &p)
{
int c;
bool turn = true;
while (turn)
{
c = getch();
switch (c)
{
case RIGHT:
{
++x;
if (x >= Get_width() - 1)
--x;
gotoxy(x * 2, y);
break;
}
case LEFT:
{
--x;
if (x <= 0)
++x;
gotoxy(x * 2, y);
break;
}
case UP:
{
--y;
if (y <= 0)
++y;
gotoxy(x * 2, y);
break;
}
case DOWN:
{
++y;
if (y >= Get_height() - 1)
--y;
gotoxy(x * 2, y);
break;
}
case SPACE:
if (xy[y][x] != 0)
break;
if (p == 2)
{
xy[y][x] = 2;
}
else
{
xy[y][x] = 1;
}
turn = false;
break;
}
}
}
bool CPoint::check(int &p)
{
int j, sum = 0;
for (j = -5; j <= 5; j++) // 좌우 체크
{
if (x + j <= 0 || x + j >= Get_width())
continue;
if (p == xy[y][x + j])
{
sum++;
if (sum == 5)
return false;
}
else
sum = 0;
}
for (j = -5; j <= 5; j++) // 상하 체크
{
if (y + j <= 0 || y + j >= Get_height())
continue;
if (p == xy[y + j][x])
{
sum++;
if (sum == 5)
return false;
}
else
sum = 0;
}
for (j = -5; j <= 5; j++) // 오른쪽 위 왼쪽 아래 체크
{
if (y + j <= 0 || y + j >= Get_height())
continue;
if (x + j <= 0 || x + j >= Get_width())
continue;
if (p == xy[y + j][x + j])
{
sum++;
if (sum == 5)
return false;
}
else
sum = 0;
}
for (j = -5; j <= 5; j++) // 왼쪽 위 오른쪽 아래 체크
{
if (y + j <= 0 || y + j >= Get_height())
continue;
if (x + j <= 0 || x + j >= Get_width())
continue;
if (p == xy[y + j][x - j])
{
sum++;
if (sum == 5)
return false;
}
else
sum = 0;
}
return true;
}
그 다음 맵을 만들려고 했다. 그런데 아까 문제중 파일 입출력을 사용하라고 했는데 오목에서 파일 입출력을 받을 것이라고는 맵 / 랭킹정도 밖에 없다고 생각했다. 하지만 필자는 하루동안 (4시간) 만들어야하는 사명을 가지고 있으므로 맵만 파일입출력을 받기로 했다. 맵 받는게 무진장 쉽다고 생각한 것은 내 착오였다.
일단 텍스트로 맵 정보를 받는데, 그 크기를 자유자제로 조정할 수 있어야 하므로 맵을 읽어 드리는 2차원 배열또한 크기가 자유자제로 바뀌어야한다. 하지만 여러분들은 (필자포함) 배열의 인덱스는 변경될 수 없다고 배웠을 것이다. 실제로 배열 인덱스에 변수를 넣으면 "변수 넣지마 꺼져" 라는 컴파일 에러를 발견하게 될 것이다 (VS2015기준 / C99였나부터 잘 모르겠지만 가변변수가 배열 인덱스에 허용된다고 한다.)
따라서 필자는 동적할당으로 배열을 만들겠다는 망상을 가지고 map.h / map.cpp를 만들었다.
//map.h
#pragma once
#include"Define.h"
class MAP
{
private:
int width; // 넓이
int height; // 높이
public:
int **xy=NULL; // 동적할당을 위한 더블포인터 xy
void Init(); // 초기화
void Release(); // 메모리 해제
int Get_width(); // 넓이 가져오기
int Get_height(); // 높이 가져오기
};
//map.cpp
#include"map.h"
void MAP::Init()
{
FILE *fp = fopen("mapsize.txt", "r");
int ret = 0;
while (ret != EOF)
ret = fscanf(fp, "%d %d", &width, &height);
xy = new int*[height];
for (int i = 0; i < height; i++)
{
xy[i] = new int[width];
memset(xy[i], 0, sizeof(int)*width);
}
}
void MAP::Release()
{
for (int i = 0; i < height; i++)
delete xy[i];
}
int MAP::Get_height() { return height; }
int MAP::Get_width() { return width; }
마지막으로 대망의 main.cpp를 만들 차례이다!
//main.cpp
#include"Define.h"
#include"CPoint.h"
int main()
{
CPoint cpt(1, 1);
cpt.Init();
int user = 1;
bool check = true;
char name[2][256];
for (int i = 0; i < 2; i++)
{
cout << i + 1 << "번째 님의 이름을 입력:\n";
cin >> name[i];
}
for (int j = 0; j < cpt.Get_height(); j++)
for (int i = 0; i < cpt.Get_width(); i++)
cpt.xy[j][i] = 0;
cpt.screen();
while (check)
{
gotoxy(0, 20);
cout << name[user - 1] << "님 차례";
cpt.input(user);
cpt.screen();
check = cpt.check(user);
if (user == 1)
user = 2;
else
user = 1;
}
gotoxy(0, 20);
cout << name[user - 2] << "님의 승리" << endl;
cpt.Release();
}
이것으로 오목을 4시간(실제 작업시간은 7시간) 만에 만들고 잤다. 사실 시간이 가장 걸렸던건 2차원 배열을 동적으로 받는것에서 3시간을 날렸다. 후... 다시는 하기 싫은 노가다였다.
'프로그래밍 > C++언어' 카테고리의 다른 글
[C++언어]더미노드가 있는 단순연결리스트로 주소록 만들기 (0) | 2016.04.15 |
---|---|
[C++언어]하노이탑(hanoi) 게임 만들기 (0) | 2016.04.15 |
이번에 해볼것은 저번에 했던 우주선에서 배경을 텍스트 파일로 불러오는 것이다.
한마디로 요약하자면 배열에 들어 갈 값을 텍스트파일로 받아오는것이다.
엄청나게 간단하다.
int map[WIDTH][HEIGHT]; 일단 이렇게 2차원의 map이라는 배열을 선언해 준 후
이렇게 메모장에 배경과 맵을 만들어 준다.
그리고
FILE *fp = fopen("map.txt", "r");
for (int i = 0; i<WIDTH; i++)
for (int j = 0; j<HEIGHT; j++)
fscanf(fp, "%d", &map[i][j]);
이렇게 해주면 끝이다. fscanf 는 공백까지 읽어드리므로 그냥 1하고 스페이스바 한번 누르고 1 이렇게 쓰면 된다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 우주선 (0) | 2016.06.07 |
---|---|
[C언어]배열을 이용하여 맵 만들기. (0) | 2016.06.07 |
[C언어]구조체와 열거형을 이용해 주소록 만들기 (0) | 2016.04.15 |
[C언어]배열과 문자열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
[C언어]배열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
조건
1. 배열의 크기 상관없음.
2. 우주선 모양 상관없음.
3. 구름(▩)의 모양, 속도 상관없음. 갯수는 적어도 세 개 이상.
4. 테두리 지워지지 말것.
5. 우주선이 구름에 가려지면 안 됨. 그 반대로 구현해야함.
-----------------------------------------------------------------------------------------------------------
솔직히 우주선이라 보기에는 너무 대충만들었다.
그래도 일단 시작해보자.
필자는 이번 문제를 보면서 생각한 것이 우주선은 어쩌피 안 움직이고 뒤에 배경 즉, 구름만 움직여야 한다는 조건을 듣고 생각을 해봤다. "차라리 우주선을 배경으로 씌워버리면 어떨까? 어쩌피 우주선은 고정이니깐" 이런 생각을 가지고 저번 포스팅때 만든 맵을 그대로 가져왔다.
우주선이 해결되니 남은 것은 구름이다. 우주선은 기본적으로 움직여야 하니 구름은 스스로 내려가도록 설정해야한다. 따라서 필자는 AutoMove() 라는 함수를 새로 만들었다.
AutoMove()
{
m_y++;
}
맨 처음에는 이렇게 짰었다. 하지만 구름은 미친듯한 속도로 내려가는 걸 보고 절망에 빠졌고 속도를 늦출 방법을 생각해야했다. 그래서 검색을 하던중 time.h에 시간에 관련된 함수가 있는 것을 보고 delay(clock_h n) 이라는 함수라는 것을 새로 만들었다. delay함수는 이 함수를 컴파일러가 읽으면 n값 만큼 시간을 지연시켜주는 함수이다.
void delay(clock_t n)
{
clock_t start = clock();
while (clock() - start < n);
}
AutoMove()
{
delay(100);
m_y++;
}
이렇게 설정을 해주고 나니 이제 남은 것은 구름과 테두리를 충돌 체크 해줘야한다.
충돌 체크는 의외로 쉬웠다.오른쪽으로 움직일 시 구름의 좌표 + 구름의 길이 +1의 값이 BLOCK 즉 테두리 일 경우 입력을 못 받게 했으면 왼쪽으로 움직일 시 구름의 좌표 -1의 값을 체크했다. 이렇게 완성을 했다.
이번에도 소스코드는 C++이다. 하지만 전편에서도 말했지만 딱히 상관은 없다. C++의 꽃인 상속(다형성)은 1도 안썼다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 파일입출력으로 맵 받아오기. (0) | 2016.06.07 |
---|---|
[C언어]배열을 이용하여 맵 만들기. (0) | 2016.06.07 |
[C언어]구조체와 열거형을 이용해 주소록 만들기 (0) | 2016.04.15 |
[C언어]배열과 문자열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
[C언어]배열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
맵 만들기
1. 맵을 만든다.(벽에 닿으면 못나가게 충돌체크)
2. 움직일 플레이어와 도착지점을 만든다.
3. 플레이어가 도착점에 들어가면 종료
-----------------------------------------------------------------------------------------------------------
이번 문제는 VS에서 주는 기본적인 함수를 알고 깨야한다.
void setXY(int x, int y)
{
// 함수값을 정해주는 함수
COORD Pos = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
바로 이 함수인데, 좌표값을 잡아주는 함수이다. 함수 이름은 마음대로 정해도 된다.
꼭 배열로 안 만들어도 되지만, 쉽고 간편하게 만들기 위해서 배열을 사용한다.
필자는 배열에 0 , 1 , 2라는 숫자를 넣었고 각각 ROAD,BLOCK, FINISH 로 enum으로 이름을 정의해 줬다. (꼭 해줄 필요는 없다. 가독성을 위해서 한 것 이므로)
그리고 배열로 출력을 어떻게 해요 라는 분들이 있는데, 우리에게는 setXY 함수가 있으니 활용을 하면 된다! 필자 같은 경우에는
void Render()
{
setXY(m_x * 2, m_y);
printf("%s", m_name);
}
이런식으로 사용했다. 솔직히 x에 2를 왜 곱하는지는 모르겠지만 흠흠... 일단 오른쪽으로 가려면 꼭 2배로 증가해야 한다는 사실을 알아두도록 하자.
int map[WIDTH][HEIGHT] =
{
{ 1,1,1,1,1,1,1,1,1,1 },
{ 1,0,1,0,0,0,0,0,0,1 },
{ 1,0,1,0,0,0,0,1,0,1 },
{ 1,0,0,1,0,0,0,1,0,1 },
{ 1,0,0,1,0,0,0,0,0,1 },
{ 1,0,0,0,0,1,1,0,0,1 },
{ 1,0,0,0,0,1,1,0,0,1 },
{ 1,0,0,0,0,0,0,0,0,1 },
{ 1,0,0,0,0,1,1,0,2,1 },
{ 1,1,1,1,1,1,1,1,1,1 },
};
이렇게 배열을 짰고 출력 할때는
for (int i = 0; i < WIDTH; i++)
{
for (int j = 0; j < HEIGHT; j++)
{
setXY( i* 2,j);
if(map[i][j]==0)
printf("");
else if(map[i][j]==1)
printf("□");
else if(map[i][j]==2)
printf("☆");
}
}
대충 이렇게 해주면 될 듯하다.
이번꺼는 원래 C++로 짰다. C로 바꾸기 귀찮아서.... C++로 올리겠다. 차이는 구조체를 클래스로 만들어줬자는 거 밖에 없으므로 그렇게 혼동은 안 올 것이다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 파일입출력으로 맵 받아오기. (0) | 2016.06.07 |
---|---|
[C언어] 우주선 (0) | 2016.06.07 |
[C언어]구조체와 열거형을 이용해 주소록 만들기 (0) | 2016.04.15 |
[C언어]배열과 문자열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
[C언어]배열을 이용한 달팽이(나선형)구조 만들기 (0) | 2016.04.15 |
● 명예훼손죄
형법 제307조[명예훼손] 1공연히 사실을 적시하여 사람의 명예를 훼손한 자는 2년 이하의 징역이나 금고 또는 500만원 이하의 벌금에 처한다. 2공연히 허위의 사실을 적시하여 사람의 명예를 훼손한 자는 5년 이하의 징역, 10년 이하의 자격정지 또는 1천만원 이하의 벌금에 처한다.
1. 요건
(1) 공연성: 불특정 또는 다수인이 인식할 수 있는 상태(판례는 전파가능성설의 입장임)
<사례>
- 99도5622.
- 83도2222
- 85도431
- 99도4579
- 83도2190
- 83도891
(2) 사실의 적시
현실적으로 발생하고 증명할 수 있는 과거와 현재의 상태를 의미
<사례>
- 94도1770
- 88도1397
2. 위법성조각사유
형법 제310조[위법성의 조각] 제307조 제1항의 행위가 진실한 사실로서 오로지 공공의 이익에 관한 때에는 처벌하지 아니한다.
(1) 취지: 개인의 명예보호와 표현의 자유의 충돌을 조화, 조정하기 위한 규정
(2) 요건
가. 적시된 사실이 진실한 사실일 것 (제 307조 1항)
나. 공익성: 사실의 적시가 오로지 공공의 이익에 관한 것일 것.
공공의 이익은 국가, 사회 기타 일반 다수인의 이익에 관한 것 뿐만 아니라 특정한 사회집단이나 그 구성원의 관심과 이익에 관한 것도 포함
<사례> 88도899
● 폭행죄
형법 제260조[폭행] 1 사람의 신체에 대하여 폭행을 가한 자는 2년 이하의 징역, 500만원 이하의 벌금, 구류 또는 과료에 처한다.
3 피해자의 명시한 의상에 반하여 공소를 제기할 수 없다.
1. 폭행의 개념: 형법 제 260조의 “폭행”은 협의의 폭행
(1) 최광의의 폭행: 사람, 물건 등 대상 불문. 일체의 유형력 행사
(2) 광의의 폭행: 사람에 대한 직,간접의 유형력 행사 (예: 공무집행방해죄, 특수도주죄, 강요죄등의 폭행)
(3) 협의의 폭행: 사람의 신체에 대한 유형력의 행사 (예: 폭행죄, 특수공무원폭행죄의 폭행)
(4) 최협의의 폭행: 상대방의 반항을 불가능하게 할 정도의 폭행 (예: 강도죄, 강간죄의 폭행 등)
2. 협의의 “폭행”의 구체적 사례
(1) 안수기도에 수반하는 신체적 행위가 단순히 손을 얹거나 약간 누르는 정도가 아니라 그것이 지나쳐서 가슴과 배를 반복하여 누르거나 때려 그로 인하여 사망에 이른 것과 같은 정도의 것이라면, 이는 사람의 신체에 대한 유형력의 행사로서 폭행의 개념에 속하는 것이다.
(2) 폭행은 그 성질상 반드시 신체상 가해의 결과를 야기함에 족한 완력행사가 있음을 요하지 아니하고 육체상 고통을 수반하는 것도 요하지 아니하므로 폭언을 수차례 반복하는 것도 폭행인 것이다.
(3) 거리상 멀리 떨어져 있는 사람에게 전화기를 이용하여 전화하면서 고성을 내거나 그 전화 대화를 녹음 후 듣게 하는 경우에는 특수한 방법으로 수화자의 청각기관을 자극하여 그 수화자로 하여금 고통스럽게 느끼게 할 정도의 음향을 이용하였다는 등의 특별한 사정이 없는 한 신체에 대한 유형력의 행사를 한 것으로 보기 어렵다.
(4) 단순히 눈을 부릅뜨고 “이 시XX아, 가면 될 것 아니냐” 이라고 욕설을 한 것만으로는 피해자에게 불쾌감을 주는 데 그칠 뿐 피해자의 신체에 대한 유형력의 행사라고 보기 어려워 폭행죄를 구성한다고 할 수 없다.
3. 소추조건: 반의사 불벌죄
(1) 개념: 피해자의 명시한 의사에 반하여 공소를 제기할 수 없다.
(2) 반의사불벌죄에 해당하는 범죄
- 협박죄
- 명예훼손죄
- 과실치상죄
(3) 비교: 친고죄
- 피해자의 고소가 있는 경우에만 공소제기를 할 수 있는 범죄
- 해당범죄(사자명예훼손죄, 모욕죄 등)
4. 특수폭행죄
형법 제261조[특수폭행] 단체 또는 다중의 위력을 보이거나 위험한 물건을 휴대하여 제260조 제1항 또는 제2항의 죄를 범한 때에는 5년이하의 징역 또는 1천만원 이하의 벌금에 처한다.
(1) 단체 또는 다중의 위력을 보이는 경우
가. 단체: 공동의 목적을 가진 다수인의 계속적이고 조직적인 결합체
(예: 조직폭력의 조직, 법인, 노조, 정당, 사회단체 등)
나. 다중: 단체를 이루지 못한 다수인의 집합체
(2) 위험한 물건을 휴대한 경우
가. 위험한 물건: 총, 검, 삽 날 길이 21츠의 야전 삽, 면도칼, 파리약 유리병, 드라이버, 가위, 곡괭이 자루, 시멘트 벽돌, 마요네즈 병, 자동차
- 식칼: 피해자가 먼저 식칼을 들고나와 피고인을 찌르려다가 피고인이 이를 저지하기 위하여 그 칼을 뺏은 다음 피해자를 훈계하면서 위 칼의 칼자루 부분으로 피해자의 머리를 가볍게 쳤을 뿐이라면 피해자가 위험성을 느꼈으리라고는 할 수 없다.
- 당구 큐대: 직접 폭행에 이용한 경우(위험한 물건에 해당)
<비교> 거짓말하였다는 이유로 머리부위를 3~4회 가볍게 톡톡 때리고 배 부위를 1회 밀어 폭행한 경우 (위험한 물건에 해당하지 않음)
나. 휴대: 몸에 지니고 있는 경우
- 깨진 유리조각을 피해자에게 던진 경우
- 범행현장에서 과도를 집어들어 호주머니에 넣은 경우
(범인이 위험한 물건을 휴대하고 있는지 피해자가 모른 경우에도 본죄 성립)
다. 소추조건: 반의사불벌죄가 아님
● 절도
형법 제329조[절도] 타인의 재물을 절취한 자는 6년 이하의 징역 또는 1천만원 이하의 벌금에 처한다.
1. 객체: 타인이 점유하는 타인의 재물
- 공동점유: 재물의 타인성 인정
- 타인소유 자기 점유의 물건(횡령죄)
<사례> 타인의 소유상에 권원 없이 식재한 수목의 소유권은 토지소유자에게 귀속하고 권원에 의하여 식재한 경우에는 그 소유권이 식재한 자에게 있으므로, 권원 없이 식재한 감나무에서 감을 수확한 것은 절도죄에 해당한다(대법원)
- 재물: 경제적 교환가치를 요하지 않는다. 따라서 애인의 사진, 무효인 약속어음, 임감증명서 등도 재물이 될 수 있다.
- 금제품: 절대적 금제품(소유자체가 금지: 위조통화 등) / 상대적 금제품(점유가 금지: 총포, 마약 등)
- 판례: 모두 몰수되기 전까지는 재물서 인정
- 불법원인급여: 재물성 인정
2. 행위: “절취” 실행의 착수시기가 중요
가. 실행의 착수시기 : 타인의 점유를 배제하는데 밀접한 행위를 개시하거나 목적물을 물색한 때
나. 사례
- 주간에 절도의 목적으로 방 안까지 들어갔다가 절취할 재물을 찾지 못하여 거실로 돌아 나온 경우 실행의 착수 인정
- 금품을 훔칠 목적으로 피해자의 집에 담을 넘어 침입하여 그 집 부엌에서 금품을 물색하던 중 발각되어 도주한 것이라면 이는 절취행위에 착수한 것이라고 보아야 한다.
- 자동차 안에 들어 있는 밍크코트를 절취하기 위하여 자동차의 손잡이를 당기던 중 체포된 경우 절도죄의 실행의 착수를 인정할 수 있다.
- 소매치기의 경우 피해자의 양복 주머니로부터 금품을 절취하려고 그 호주머니에 손을 뻗쳐 그 겉을 더듬은 때에는 실행의 착수를 인정할 수 있다.
- 금품을 절취하기 위하여 고속버스 선반위에 놓여진 손가방의 한쪽 걸쇠만 열었다 하여도 절도 범행의 실행의 착수를 인정할 수 있다.
- 범인들이 함께 담을 넘어 마당에 들어가 그 중 1명이 그 곳에 있는 구리를 찾기 위하여 담에 붙어 걸어가다가 잡힌 경우 실행의 착수를 인정할 수 있다.
3. 죄수관계: 불가벌적 사후행위
가. 의의: 절도죄는 상태범이므로 절도가 기수가 된 이후에 장물을 손괴 또는 처분하는 행위는 절도죄에 흡수된다.
나. 사례:
- 절취한 자기앞수표의 환금행위는 절취행위에 수반한 당연의 결과라 하여 절도 행위에 대한 가벌적 평가에 당연히 포함되었다고 봄이 상당하므로 사기죄가 성립하지 아니한다.
- 열차승차권을 절취한 자가 역직원으로부터 그 대금의 환불을 받음에 있어서 비록 기망행위가 수반한다고 하더라도 따로 사기죄로 평가할 만한 새로운 법익의 침해가 있다고 볼 수 없다.
- 대마를 절취하여 흡입할 목적으로 소지하는 행위는 절도죄의 보호법익과는 다른 새로운 법익을 침해하는 행위이므로 절도죄의 불가벌적 사후행위로서 절도죄에 포괄 흡수된다고 볼 수 없고 별개의 죄를 구성한다고 볼 것이다.
4. 특수절도
형법 제331조[특수절도] 1 야간에 문호 또는 장벽 기타 건조물의 일부를 손괴하고 전조의 장소에 침입하여 타인의 재물을 절취한 자는 1년 이상 10년 이하의 징역에 처한다.
2 흉기를 휴대하거나 2인 이상의 합동하여 타인의 재물을 절취한 자도 전항의 형과 같다.
가. 세부유형
(1) 손괴후야간주거침입절도
- 실행의 착수시기: 손괴하기 시작한 때
<사례> 자물통 고리를 절단하고 출입문을 손괴한 뒤 집안으로 침입하려다가 발각된 것이라면 이는 특수절도죄의 실행에 착수한 것이다.
(2) 흉기휴대절도
(3) 합동절도
5. 사용절도
가. 의의: 타인의 재물을 무단으로 일시적으로 사용한 후에 소유자에게 반환하는 것 (예: 읽어보고 돌려주기 위하여 책을 절취한 경우)
나. 효과: 불법영득의사의 소극적요소를 결하여 절도죄로 처벌할 수 없다. 단, 그 객체가 자동차, 선박, 항공기, 원동기장치자전거일 때에는 자동차 등 불법사용죄로 처벌한다.
다. 자동차 등 불법사용죄
형법 제331조의 2[자동차등 불법사용] 권리자의 동의 없이 타인의 자동차, 선박, 항공기 또는 원동기장치자전거를 일시 사용한 자는 3년 이하의 징역, 500만원 이하의 벌금, 구류 또는 과료에 처한다.
6. 친족상도례
형법 제328조[친족 간의 범행과 고소]
1 직계혈족, 배우자, 동거친족, 호주, 가족 또는 그 배우자 간의 제 323조의 죄는 그 형을 면제한다.
가. 적용범죄: 절도죄, 사기죄, 공갈죄, 횡령죄, 배임죄 및 장물죄(강도죄, 손괴죄는 미 적용)
<상식> 친족(민법 제777조): 8촌 이내의 혈족, 4촌 이내의 인척, 배우자
혈족(민법 제768조):
n 직계혈족: 자기의 직계존속 / 직계비속
n 방계혈족: 자기의 형제자매 / 형제자매의 직계비속 / 직계존속의 형제 자매 및 그 직계비속
인척(민법 제769조): 혈족의 배우자, 배우자의 혈족, 배우자의 혈족의 배우자
나. 친족관계의 존재 범위
(1) 소유자 점유가 모두 존재할 것
(2) 행위시에만 존재하면 적용가능
● 정범 및 공범론
1. 범죄참가형태
(가) 정범
1) 직접정범: 행위자 자신이 범죄를 직접 실행하는 경우에 해당
- 1인이 혼자 단독으로 범행: 단독정범
- 수인이 공동으로 범죄를 실행: 공동정범
- 수인의 단독범이 병존하는 형태: 동시범
2) 간접정범: 행위자 자신이 직접 범죄를 실행하지 않고 타인을 이용하여 간접적으로 실행
(나) 공범
1) 교사범: 타인을 교사하여 범죄를 실행하게 하는 자
2) 방조범: 타인의 범죄를 방조하는 자
2. 간접정범
<형법 제34조> 1 어느 행위로 인하여 처벌되지 아니하는 자 또는 과실범으로 처벌되는 자를 교사 또는 방조하여 범죄행위를 결과를 발생하게 한 자는 교사 또는 방조의 예에 의하여 처벌한다.
(1) 개념
- 타인을 생명있는 도구로 이용하여 간접적으로 범죄를 실행하는 정범형태
- 이용자가 동물을 이용하거나 사람을 생명 없는 도구로 이용한 경우에는 간접정범이 아니라 직접정범이 성립한다. (예 : 사람을 갑자기 밀어 넘어뜨려 넘어지게 하여 타인의 재물을 손괴하게 한 경우 → 손괴죄의 직접정범)
(2) 사례
- 86도2395
- 피고인이 피해자를 협박하여 그로 하여금 자상케 한 경우
- 95도1706
3. 공동정범
<형법 제30조> 2인 이상이 공동하여 죄를 범한 때에는 각자를 그 죄의 정범으로 처벌한다.
(가) 성립요건
- 공동실행의 의사: 2인 이상의 자가 공동으로 수립한 범행계획에 따라 공동으로 범죄를 실행하려는 의사(공모, 없으면 동시범)
<사례> 2002도7477
- 공동의 실행행위: 전체적인 공동의 범행계획을 실현하기 위하여 공동참가자들이 분업적 공동작업원리에 따라 상호간의 역할을 분담하여 각각 실행단계에서 본질적인 기능을 수행하는 것. 범죄수행에 불가결한 행위라면 구성요건의 전부 또는 일부뿐만 아니라 구성요건의 범위 외에 행위일 지라도 공동의 실행 행위로 인정될 수 있다.
<사례> 85도2411
<비교> 공모공동정범: 2인 이상의 자가 범죄를 공모한 후에 그 공모자 가운데 일부만이 범죄의 실행행위에 나아간 경우에 실행행위를 담당하지 아니한 공모자도 공동정범이 성립한다는 이론
4. 동시범
<형법 제19조> 동시 또는 이시의 독립행위가 경합한 경우에 그 결과발생의 원인된 행위가 판명되지 아니한 때에는 각 행위를 미수범으로 처벌한다.
<형법 제263조 동시범> 독립행위가 경합하여 상해의 결과가 발생하게 한 경우에 있어서 원인된 행위가 판명되지 아니한 때에는 공동정범의 예에 의한다.
5. 교사범
<형법 제31조> 1 타인을 교사하여 죄를 범하게 한 자는 죄를 실행한 자와 동일한 형으로 처벌한다.
(가) 개념: 타인을 교사하여 범죄실행의 결의를 생기게 하고 이 결의에 의하여 범죄를 실행하게 하는 자
<사례>
- 91도542
6. 종범(방조범)
<형법 제32조> 1 타인의 범죄를 방조한 자는 종범으로 처벌한다.
2 종범의 형은 정범보다 감경한다.
(가) 개념 : 타인의 범죄를 방조한 자, 정범의 범행실행의 결의를 강화하거나 그 실행행위를 가능 또는 용이하게 해 주는 실행행위 이외의 원조행위를 말한다.
(나) 사례
- 96도 2427
- 자동차 운전면허가 없는 자에게 승용차를 제공하며 그로 하여금 무면허 운전을 하게 하였다면 이는 도로교통법위반(무면허운전) 범행의 방조행위에 해당한다.
- 웨이터인 피고인들은 손님들을 단순히 출입구로 안내하였을 뿐 미성년자인 여부의 판단과 출입허용 여부는 2층 출입구에서 주인이 결정하게 되어 있었다면 피고인들의 위 안내 행위가 곧 미성년자를 클럽에 출입 시킨 행위 또는 그 방조 행위로 볼 수 없다.