클래스의 배경이 되는 여러 가지 요소들을 클래스의 기본 배경에서 알아보았다. 데이터타입, 변수, 상수, 할당을 클래스라는 관점에서 어떠한 관련이 있는지를 알아보자. 그리고 클래스의 전신이라 할 수 있는 구조체가 어떻게 관련이 있는지에 대해서 알아보고 실제 클래스가 어떻게 만들어지고
어떻게 사용되어지는지 살펴보자.
이번 글에서 소개하는 내용은 다음과 같다.
    - 클래스란?
    - 구조체로 데이터 타입을 생성하는 방법
    - 클래스로 데이터 타입을 생성하는 방법
    - 클래스만의 특징
    - 클래스 변수를 생성하는 법의 차이

클래스와 객체의 의미는 혼동되는 요소들이다. 처음으로 객체와 클래스를 접했을 때, 이 개념을 이해 하는데 거의 1년 이상 걸린다고 하다. 프로그래머로서 가장 잘 다루어야 하는 부분이지만 너무나도 간단히 책장을 넘겨버리기 때문에 대충 넘어가기 쉬운 부분이기도 하다. 프로그램을 한참 배우고 난 후, 진정한 클래스의 의미에 대해 다시 생각해 볼 때쯤에 이해 할 법한 부분이다. 보통의 자바 Beginner의 경우, 이 개념을 안다면 자바의 절반이상을 깨닫고 있다고 해도 과언이 아니다. 이 장에서 설명되는 대부분의 것들은 앞장의 데이터 타입을 습득하지 않으면 거의 이해 할 수 없게 설명되어 있다. 앞장의 데이터 타입을 한번 읽어보는 것은 좋다.

1 클래스란?

1.1 클래스란?
클래스란 새로운 데이터 타입을 만드는 데이터 타입 생성기이다. 기존의 데이터 타입을 이용하여 새로운 데이터 타입을 만들어내는 것이 바로 클래스의 역할이다. 클래스가 데이터 타입 생성기라는 말만 이해하고 있어도 많은 부분이 해결되는 느낌을 가질지도 모른다.
여러분은 지금까지 클래스로 새로운 데이터타입을 만들고 있었던 것이다. 보통 뭔가를 탐구하면서 뭘 하는지 모르고 일을 하고 있을 때만큼 답답한 순간은 없다. 자바 언어를 조금 공부해 보면 수없이 클래스를 만들고, 그 클래스로 작업을 한다. 그런데 정작 클래스가 뭘 하는 건지 모르고 작업하는 경우가 많다. 여기서 정확하게 정의를 내려 두자.

클래스는 새로운 데이터 타입을 만드는 데이터 타입 생성기이다.

이 명제는 자바뿐만 아니라 C++ 관련 언어를 한다면 누구나 다 기억해야 하는 객체지향언어의 제1조의 원칙에 해당 된다.

1.2 클래스의 지위와 구조
앞장에서 설명한 데이터 타입과 변수와 상수의 구조는 계층구조로 되어 있다. 이 구조를 알고 있다면 쉽게 클래스의 개념에 접근 할 수 있다. 그 구조를 다시 살펴보면 다음과 같다.

데이터 타입과 변수와 상수의 구조

데이터 타입

변수

상수

 무 존재

존재

실존

데이터 타입의 하위에는 변수가 존재하며 변수의 하위에는 상수가 존재하다. 각각의 역할이 없으면 프로그램은 수행 될 수 없다. 그렇다면 클래스는 어느 부분에 속하는 것일까? 위의 구조에서 제일 상위에 존재하는 것이 바로 클래스이다. 클래스는 데이터 타입의 윗부분에 자리를 차지하고 있으며
데이터 타입과 관련이 있다. 그 구조를 다시 만든다면 아래와 같이 나타낼 수 있다.

데이터 타입과 변수와 상수의 구조

클래스

데이터 타입

변수

상수

 무 존재

존재

실존

무엇에 사용하는 것이길래 제일 위에 있을까? 답은 데이터 타입을 새로 하나 만드는 역할을 담당하고 있다. 데이터 타입은 형태는 있지만 존재하지 않기 때문에 무존재라고 칭했다. 그렇지만 클래스는 그 상위레벨에 있기 때문에 아예 무에서 무존재, 즉 무형을 만드는 역할을 한다. 그래서 위의 표에서 무(無)라고 표시했다. 클래스는 신(神)이라고 생각된다. 신은 인간이라는 데이터 타입을 만들었다. 그리고 인간이라는 데이터 타입에 각각의 이름을 부여하여 하나의 객체(변수)로 만들었다. 인간이라는 데이터 타입을 만든 이는 바로 클래스이다. 그래서 클래스는 신이다. 개인적인 생각이다.!! 현재에서 가장 핵심적인 사항은 “클래스는 데이터 타입 생성기의 역할을 한다“라는 것이다. 주제는 잊지말자.

자바에서 제공하는 기본적인 데이터 타입은 int, long, float, double, char…. 등이 있는데 이러한 데이터 타입을 우리는 기본 데이터타입이라고 부른다. 기본데이터 타입의 한계는 하나의 데이터만을 넣을 수밖에 없다는 단점이 있다. 각각의 형태에 해당되는 데이터를 하나만을 담을 수 있는 것이다. 현실 세계의 데이터들은 제일 밑바닥에는 이러한 기본 데이터들로 이루어져 있겠지만 알고 보면 기본적인 데이터를 묶어서 또 다른 형태의 틀을 만든다. 예를 들어 인간이라는 데이터 타입이 있다. 이 데이터 타입의 형태는 여러분이 어렴풋이 생각하는 인간의 형태 그 자체이다. 여기에 변수를 붙이면, 즉 이름을 홍길동이라고 준다면 홍길동은 현실 세계에 공간을 차지하는 하나의 변수가 된다.
    - 인간 홍길동;

자세히 들여다보면 인간이라는 데이터 타입의 밑바닥은 변수로 이루어져 있으며, 많은 변수가 뭉쳐서 하나의 데이터 타입을 이루고 있다. 이와 같이 여러 개의 변수를 묶어서 하나의 데이터 타입으로 생성하는 역할을 하는 놈이 바로 class이다. 인간이 만들어지기 위해서는 클래스에서 아주 다양한 형태의 작업을 해주어야 하다 클래스로 간단히 인간이라는 . 데이터 타입을 만드는 것을 보여주고 있다.

인간 클래스의 디자인
    class 인간{
        String name;
        int age;
        float height;
        float weight;
        등등….
    }

이쯤에서, 다시 한번 class에 대해서 정의를 내리면, 많은 변수들이 뭉쳐서 새로운 데이터 타입을 만들어 내는 역할을 하는 것이 클래스라고 정의를 내린다. 그런데 왜 데이터가 아니고 변수일까? 그것은 인간이 태어나면 각각의 이름과 나이, 키 등을 부여 받는다. 각각이 생성되기 전 단계이기 때문에 생성되는 순간 어떠한 값이 할당 될지 알 수 없으니 즉, 데이터 타입은 형태에서 만들어지는 순간 각각 다른 값을 가져야 하기 때문에 변수의 형태로 데이터 타입 내에 들어가는 것이다.

자바에서는 클래스를 사용하지만, 자바 이전의 C 언어에서는 구조체라는 것을 사용한다. 구 조체는 자바의 전 단계에 데이터 타입을 만드는 놈이었다. 클래스의 할아버지 정도 되는 구조체의 의미를 이해한다면 클래스의 정확한 특징을 이해 할 수 있을 것이다.

1.3 결론
클래스는 데이터 타입을 만들며 그리고 데이터 타입은 변수를 생성하며 변수에는 상수를 할당할 수 있다. 클래스는 새로운 데이터 타입을 만드는 데이터타입 생성기이다. 그리고 다음 장에서 구조체와 클래스 그리고 데이터 타입 생성기라는 측면에서 클래스를 살펴보자.


2 구조체로 데이터타입을 생성하는 방법

2.1 구조체란?
구조체는 클래스가 없던 표준 C에서 시절에 새로운 데이터 타입을 만드는 역할을 담당하고 있었다. 현재 우리가 언급한 데이터 타입은 분명히 하나만의 데이터를 담을 수 있는 데이터 타입이다. “int a=3“ 이라고 했을 때 우리는 a라는 변수에 다른 수를 담고자 한다면 3이라는 값은 사라진다. 즉,
a=5라고 했을 때 a에 들어 있던 3은 없어지고 다시 5라는 수가 a의 메모리에 자리를 잡게 된다. 이러한 측면에서 기본 데이터 타입의 문제점은 단 하나의 데이터를 넣을 수 있다는 것이다. 데이터 타입이 2개의 수를 담을 수 있다고 한다면 어떨까? 표준 C(ANSI C)언어에서는 이를 구조체라는 것을 사용하여 해결하고 있다. 물론, 자바 언어에서는 사용하지 않지만 구조체의 의미는 객체 언어의 역사를 말해 주고 있기 때문에 구조체에 대해 약간의 지식을 가지고 있으면 자바 언어가 어떠한 구조로 되어 있는지 쉽게 이해 할 수 있다 . 구조체의 정확한 문법 구조는 알 필요가 없다. 단순히 아~ 이렇게 만드는구나 정도를 이해하면 된다. 일단 구조체의 예를 살펴보자.

2.2 구조체를 만드는 방법
클래스로 데이터 타입을 만든다고 했다. 구조체는 데이터타입을 생성하는 데이터 타입 생성기 역할을 하고 있기 때문에 클래스와 같은 레벨에 존재한다. 그래서 구조체는 클래스와 동급이다. 구조체는 완벽하게 클래스와 그 의미는 같다. 그리고 초기 구조 또한 클래스와 아주 흡사하다. 구조체의 위치는 아래에서와 같이 제일 위에 존재한다.

구조체, 데이터 타입, 변수, 상수의 구조

구조체

데이터 타입

변수

상수

 무 존재

존재

실존

구조체로 데이터 타입을 생성하는 예를 살펴보자.

구조체 사용의 예
    struct PERSON {
        int age;
        long height;
        float weight;
    }
        family_member;
        struct PERSON sister; // C style structure declaration
        PERSON brother; // C++ style structure declaration
        sister.age = 13; // assign values to members
        brother.age = 7; 

자바 언어는 C++의 문법 구조를 따르고 있으며 C++는 C 언어를 기반으로 하고 있다. C 언어의 구조체는 C++에 와서 완전하게 다른 모습인 class라는 이름으로 발전하여 원래의 구조체와 공존하게 된다. 현재 소개되는 C, C++문법을 잘 살펴보면 특정한 Rule을 찾을 수 있다. 그리고 이러한 Rule은 자바 언어에서도 그대로 사용하게 된다.
위의 구조체에 대한 예를 하나씩 따져 보자. 구조체라는 것은 앞에 struct이라는 키워드를 사용하며 이름을 지정하고 있다. 즉 PERSON이라는 이름으로 구조체를 만든다는 의미이다. 그리고 그 내부에는 3개의 변수를 포함하고 있다. struct 키워드를 이용하여 3개의 변수를 묶어서 PERSON이라고 부르겠다는 것이다. 하나씩 분해해서 보면 다음과 같다.

데이터 타입과 변수와 상수의 구조
    - struct : 구조체를 만드는 키워드
    - PERSON : 구조체로 만들어진 새로운 데이터 타입
    - int age : PERSON 내부의 멤버
    - int height : PERSON 내부의 멤버
    - int weight : PERSON 내부의 멤버

이 부분에서 구조체에 대해 헷갈리지 않게 이해를 잘 해야 한다. 구조체는 새로운 형태의 데이터 타입을 만드는 역할을 한다. 이러한 점에서 구조체는 클래스와 같은 역할을 한다. 여기서 PERSON은새로운 데이터 타입이며 struct은 표준 C 언어에서 제공하는 데이터 타입 생성기이다.

    - 누가 만들었을까?
      그것은 누구나 만들 수 있으며 여기서는 제가 임의의 이름으로 하나 만들었다.

    - PERSON이라는 이름은 무엇일까?
      새로운 데이터 타입의 이름이다.

    - struct는 무엇을 하는 것일까?
      새로운 데이터 타입을 만들 수 있게 해주는 키워드이다.

    - age, height, weight는 새로운 데이터 타입 내부에 존재하는 멤버이다.

정리를 해보자. 기존에는 주어진 데이터타입으로 데이터를 하나만 넣을 수 있는 변수를 선언하여 하나의 데이터만을 넣어 사용했다. 이제는 달라졌다. 구조체를 이용하여 PERSON이라는 새로운 데이터타입을 만들었으며, 그 속에는 3개의 변수를 포함하고 있으며, 3개의 변수들을 대표하는 이름을 바로PERSON으로 하겠다는 것이다.

앞에서 언급한 데이터 타입을 상기시켜보자. 데이터 타입은 어디에 사용한다고 했나? 바로 변수를 선언할 수 있다는 것이다. 위의 만들어진 데이터 타입 PERSON을 이용하여 아래와 같이 변수를 선언했다.
    PERSON brother;
이와 같이 변수를 하나 만들었을 때 메모리가 하나 생성된다. 여기서, 변수이름은 누가 뭐래도 brother이다. 하지만 아주 곤란한 문제가 발생한다. 기존의 방식대로라면 이 속에 있는 3개의 변수에 값을 넣을 수가 없다. 그래서 나온 것이 점의(.) 원리이다. 그냥 단순히 이해하자면 소속이라는 의미
이다.
    PERSON brother;
    brother.age =100
    brother.height=170L
    brother.weight=67.5F

이와 같이 사용자가 임의로 새로운 데이터타입을 만들며 그리고 그 타입을 사용할 수 있게 하는 것이 의 구조체이다 구조체의 의미는 여기까지만 ANSI C . 알아 두자. 더 이상 구조체는 자바에서 사용 되지 않는다. 하지만 이 구조체야 말로 자바 언어에 대한 핵심의 의미를 그대로 담고 있으니 그 느낌 만큼은 정확히 알아 두어야 한다.

2.3 결론
구조체가 클래스와 사용방법이 동일하다면 왜 굳이 구조체를 이용하지 않고 새로운 형태의 클래스를 만들었을까? 바로 이 차이점이 클래스만의 특징이며 객체 지향언어의 장점이다. 앞으로 구조체보다 왜 클래스가 나은가를 알게 된다면 클래스의 개념을 어느 정도 파악하고 있는 것이다.
뭐가 다른지 답부터 보고 다음으로 넘어가자. 구조체와 클래스는 데이터 타입의 생성이라는 측면에서는 같은 역할을 한다. 클래스가 구조체보다 강력한 점은 접근 제어, 상속의 개념 그리고 메서드의 활용 부분이 클래스에 추가 되었다는 점이다. 자바를 배운다는 것은 바로 클래스의 장점을 배우는 것이다.

3 클래스로 데이터 타입을 만드는 방법

3.1 배경
위에서는 구조체로 데이터 타입을 만드는 방법에 대하여 알아보았다. 이 데이터 타입을 만드는 방법을 자바의 클래스라는 측면에서 살펴보자. C 언어의 구조체와 자바의 클래스가 같은 역할을 한다면 확장된 클래스가 아닌 기본적인 자바 클래스는 구조체와 그 모습이 동일하다는 것을 밝히면서 클래스의 의미를 다시 한번 상기 시켜 보자.

3.2 클래스 만들기
먼저, 앞에서 만들어 본 구조체와 똑같은 데이터 타입을 자바 클래스로 만들어 보자. 아래의 클래스는 앞 절에서 나온 구조체와 철자도 틀린 것이 별로 없다.
PERSON.java
    public class PERSON {
        public int age;
        public long height;
        public float weight;
    }
C:\examples\1.클래스의 개념>javac PERSON.java
C:\examples\1.클래스의 개념>dir
C:\examples\1.클래스의 개념 디렉터리
2001-06-03 09:29p <DIR> .
2001-06-03 09:29p <DIR> ..
2001-06-03 09:29p 246 PERSON.class
2001-06-03 09:29p 90 PERSON.java

이 파일을 컴파일 했을 때 우리는 확장자를 .class 가진 파일을 하나 얻을 수 있다. 약간 다르긴 하지만 public을 모두 제거하고 struct 키워드를 class로 바꾼다면 모든 면에서 구조체와 똑같다. 3개의 변수를 담고 있는 새로운 데이터 타입이 만들어진 것이다.
위의 class 키워드로 만든 데이터 타입을 실제 자바로 실행해 볼 수 있는 main 메서드를 포함한 코드를 제작해 보자. 자바에서는 main 메서드를 포함하고 있는 클래스가 실행 클래스가 되며 실행은 “java 클래스의 이름“으로 하고 있다. main 메서드를 포함한 코드는 다음과 같다.

Test3.java
    public class Test3 {
        public static void main(String[] args) {
            PERSON brother = new PERSON();
            brother.age =100;
            brother.height = 170L;
            brother.weight = 67.0F;
            System.out.println("age:" + brother.age);
            System.out.println("height:" + brother.height);
            System.out.println("weight:" + brother.weight);
        }
    }
    C:\examples\1.클래스의 개념>javac Test3.java
    C:\examples\1.클래스의 개념>java Test3
    age:100
    height:170
    weight:67.0

구조체와 클래스의 차이점은 현재의 자바 소스에서는 전혀 찾아 볼 수 없다. 아직 클래스의 장점들이 나타나고 있지 않기 때문에 별다른 차이점을 느끼지 못할 것이다. 하지만 그 차이점들이 객체 지향언어의 매력이라는 것을 미리 짐작 할 수 있을 것이다.

이제, 클래스와 구조체를 비교해 보자. 아래의 표는 클래스와 구조체의 비교를 잘 보여 주고 있다.

클래스와 구조체의 비교

클래스

구조체

종류 

클래스

클래스로 만든 데이터 타입

클래스 변수

상수

구조체

구조체로 만든 데이터 타입

구조체 변수

상수

무 존재

존재

실존


이 표에서 나타내고자 하는 것은 클래스와 구조체는 차이가 없다는 것이다. 클래스는 구조체의 복사 판일 정도로 그 개념은 비슷하다.

3.3 결론
결론적으로, 클래스는 구조체를 발전시켜 만든 것이라고 봐도 될 것이다. 여기서 클래스는 당연히 최고 상위에 존재하는 신적인 존재이며 객체 지향적인 개념에서 새로운 데이터 타입을 만든다는 것은 당연한 일이지만 고전 프로그래머에게는 약간 생소한 접근 방식일 수도 있다. 그렇다면 과연 차이점은 무엇일까? 그 차이점이 자바의 큰 힘이며 매력인 것이다. 다음 장에서는 클래스와 구조체의 차이점인 클래스만의 특징을 알아보자.

4 클래스만의 특징

4.1 클래스만의 특징 소개
구조체에는 없지만, 클래스에만 있는 특징이 바로 클래스와 구조체의 차이점이다. 클래스만의 특징은 아주 다양하게 열거할 수 있지만 구조체와의 차이점에서 찾아 볼 수 있는 단순하면서 중요한 개념들만 열거한다면 다음과 같다.
구조체와 다른 클래스만의 특징들
    - 선언과 메모리 할당
    - 데이터의 접근 방법(private와 public)
    - 멤버로 메서드 포함
    - 상속의 개념 적용

간단해 보이지만 자바 언어의 모든 특징을 전부 내포하고 있다. 메모리의 할당의 문제는 어차피 구조체이든 클래스이든 만들어지면 변수를 선언하고 메모리를 할당해야 하는 것은 마찬가지이다. 사용 방법만 약간 다를 뿐이다. 데이터의 접근과 메서드의 포함, 상속개념의 적용은 기존의 절차적 프로그래밍 기법에 반기를 드는 혁명적인 일이다. 클래스의 특징들을 알아보자.

4.2 클래스의 특징들
기본적으로 구조체에서는 메서드를 포함하지 않고 일반적인 데이터타입의 변수를 포함할 수 있다. 하지만 클래스는 한 단계 더 나아가 메서드까지 포함하고 있다. 그리고 구조체로 새로운 데이터 타입을 만들었다면 새로운 데이터 타입 내에 들어 있는 모든 요소들은 기본적으로 public이다. 하지만 클래스에서는 private와 public의 차원에서 접근제어를 구분하고 있다. 점찍고 값을 할당할 수 있다면 public이고 없다면 private이다. 마지막으로 상속의 개념은 클래스만의 막강한 힘을 주고 있다. 만들어져 있는 데이터 타입에 대한 재사용이란 측면에서 상속은 꿈의 기술이다.
C++ 언어의 창시자인 Bjarne Stroustrup은 여러 개의 변수를 조합하여 많은 양의 데이터를 담을 수 있는 새로운 데이터 타입을 만드는 방법을 제안하였으며, 그것을 확장하여 변수들의 관계를 정의하는 메서드를 포함시킴으로써 새로운 모델을 만들었는데 이것이 바로 클래스이다. 그리고 각각의 데이터 타입들간의 상속구조를 포함시키면서 Object Oriented Programming 기법의 발전된 모델을 제시하고 있다.

4.3 결론
클래스 내부에 접근제어, 메서드, 상속의 개념이 들어가면 그 규칙을 유지하고 지키기 위해서 보다 복잡한 객체개념이 들어가게 된다. 클래스 구조를 유지하기 위한 규칙을 배우는 것이 바로 자바 언어를 배우는 것으로 보아도 될 것이다. 앞으로 여러분들은 접근제어, 메서드 그리고 상속을 활용하여 새로운 클래스를 디자인하고 그 클래스를 잘 사용하는 방법, 즉 다른 사람들이 만들어 둔 클래스를 활용하여 자신의 클래스로 확장하는 방법을 배우게 된다.

5 클래스 변수를 생성하는 방법의 차이
5.1 서론
구조체와 클래스의 차이점 중 여기서는 변수를 생성하는 방법의 차이에 대하여 알아보자. 구조체와 클래스는 생성하는 방법에 있어서 차이점을 보인다. 아주 기본적인 사항이지만 클래스를 알겠다고 한다면 이것을 무시할 수는 없다.

5.2 클래스 변수를 생성하는 법
일단 구조체와 클래스의 생성의 방법의 차이점에 대해서 알아보자. 구조체와 클래스의 생성방법은 아래와 같다.

사용자 정의 데이터 타입의 생성하는 방법

구조체 변수의 생성 클래스 변수의 생성

PERSON brother;

PERSON brother =  new PERSON()

이 두 가지에 분명 다른 방법을 사용하고 있다. 구조체에서는 선언만 해 주었다. 하지만, 클래스에서는 new 연산자라는 것을 사용하고 생성자 메서드를 명시해 주어야 한다.

자바의 클래스 개념에서는 반드시 연산자로서 new 메모리를 생성하는 부분이 나와야 한다. 만약 “PERSON brother“처럼 단순히 선언만 해 준다면 절대 메모리는 생성되지 않는다. 이것은 기존의 C와 C++의 차이점이다.
참고로 C++ 언어에서는 new를 했다면 반드시 delete를 해서 메모리를 해제해 주어야 하지만 자바 언어에서는 이것을 쓰레기 수집기를 사용하여 메모리를 자동으로 해제 해 주기 때문에 delete 연산자는 사용하지 않는다.
생성자 메서드라는 것을 호출해 주어야 하는데 이 생성자 메서드는 무조건적으로, 반드시 호출해 주는 것을 원칙으로 한다. “PERSON()“이란 놈이 바로 생성자 메서드인데 여기서는 생성자 메서드라고만 언급하고 다음의 The Class에서 아주 심도 깊게 다루게 될 것이다. new와 생성자 메서드의 기능은 new 연산자를 이용하여 메모리를 생성하고 생성자 메서드를 이용하여 멤버필드의 초기화 작업을 해 주는 것이다. 자바에서 사용하는 클래스에 대한 변수선언을 하는 부분인 “PERSON brother =
new PERSON()“을 분해 해 보면 다음과 같다.
자바 클래스 데이터 타입의 변수 선언과 메모리 할당
    - PERSON : 클래스로 생성한 데이터 타입
    - brother : PERSON 데이터타입으로 선언한 변수
    - new : 메모리를 생성하는 연산자
    - PERSON() : 메모리 생성 후 초기화 작업을 담당하는 생성자

아주 간단하다. 하지만 보통의 책에서는 그냥 new라고 설명하고 있으며 생성자 메서드와 같이 사용 한다고 되어 있지만 그 내부의 의미는 아주 조직적이다. 이 부분은 뒤에 new 연산자와 생성자 메서드를 다룰 때 자세하게 언급하도록 하겠다.

5.3 결론
이 절에서는 클래스 변수를 만드는 방법에 대하여 알아보았다. 클래스는 변수이름만 주는 것이 아니라 new를 이용하여 메모리까지 생성 시켜주어야 한다는 것을 배워 보았다. 이점에서 클래스는 기존의 언어에서보다 메모리의 핸들을 보다 더 정확하게 하겠다는 의미를 내포하고 있다. 그리고 메모리가 있느냐 없느냐는 자바를 공부할 때 아주 중요한 부분을 차지한다. 프로그램할 때 가장 많이 접하게 되는 에러가 바로 메모리가 없다는 Null Point Exception이다. 이 에러는 객체에 메모리가 없는데 사용하였다는 에러이다. 이것은 프로그램을 보다 명확하게 해주는 역할을 한다.

6 마무리
자바의 가장 기본적인 원리인 데이터 타입의 이용, 변수의 선언, 메모리의 할당 그리고 초기화 작업을 한꺼번에 전부 보여주는 부분이 바로 “PERSON brother = new PERSON()“이라는 한 줄의 소스이다. 이 글에서 설명할 수 있는 클래스의 기초 개념 또한 포함하고 있기 때문에 여러분은 이 한 줄의 의미를 제대로 아는 것이 무엇보다 우선한다. 클래스의 특징인 선언과 메모리의 할당이라는 관점에서 클래스의 특징을 먼저 알아보았으며 다음 장으로 넘어가면서 데이터의 접근제어(private와 public), 멤버로 메서드 포함에 대해서 자세하게 알아본다. 구조체와 구별되는 클래스의 접근제어와 클래스내의 메서드 포함은 3장의 The Class에서 상세하게 다루게 될 것이며, 4장에서는 상속과 함께 클래스의 재사용이라는 측면에서 클래스의 개념을 배우게될 것이다. 3, 4장에서 진정한 클래스의 느낌을 얻어보자.

객체 지향 언어인 자바를 시작하면서 제일 먼저 접하게 되는 것은 바로 객체와 클래스라는 단어이다. 이 두 단어는 객체지향언어의 기본이며 가장 중요한 부분이기 때문에 올바른 클래스의 배경 지식 없이 접하게 된다면 자바는 점점 어려워진다.
먼저, 클래스의 개념을 파악하기 위해서는 데이터타입, 변수, 상수의 의미를 제대로 아는 것이 중요하다. 그리고 변수와 상수의 관계에서 나타나는 할당의 법칙을 이해함으로서 각각의 관계에 대하여 안다면 우리는 언어적인 기초를 가지고 있다고 할 수 있다. 이러한 면에서 지금부터 하는 내용은 아주 기초적인 사항들이다. 그 기초적인 개념들은 아래와 같다.
    - 데이터 타입
    - 변수
    - 상수
    - 할당의 법칙
각각의 내용들은 클래스의 개념 이해를 돕기 위한 언어적인 기초를 설명하고 있으며 이들을 이용해서 클래스와 객체라는 단어에 점차적으로 접근하고 있다. 클래스라는 것은 새롭게 탄생된 것이 아니라 기존 언어를 바탕으로 하여 보다 효율적인 방법론을 제시하고 있기 때문에 컴퓨터 언어의 배경지식을 습득한다면 클래스의 개념을 보다 효율적으로 이해할 수 있다.
어떻게 보면, 이것은 모든 컴퓨터 언어 설명서에서 가장 정확하게 설명하려고 하는 부분이다. 하지만 정확한 뜻을 파악하기 힘든 것은 언어적인 배경에 대하여 약간은 등한시하는 분위기가 있고, 이미 알고 있다는 전제 하에 설명이 이루어지고 있기 때문이다. 그래서 클래스라는 단어가 컴퓨터 언어에서 어떻게 만들어졌는지 밑바닥부터 따져 보고자 한다.


1 데이터 타입이란?

1.1 데이터 타입의 의미?

데이터 타입이란 자료의 형태를 의미한다. 현실 세계에 존재하는 모든 데이터들은 그 나름대로 의미가 있고 어느 정도 사람이 알 수 있는 구분이 있다. 이러한 실세계의 데이터들이 컴퓨터에 사용될 때에는 더 명확하게 구분된다. 데이터의 형태들이 모호하면 컴퓨터가 헷갈리기 때문이다. 데이터를 분류하는 방법이란 것은 컴퓨터 언어에 정의되어 있으며, 그 분류 원칙에 따라 데이터를 사용하게 된다. 컴퓨터 내에 데이터를 구분하는 방법을 제시해 주고 있는 것이 바로 데이터 타입이다. 그래서 데이터 타입을 자료에 대한 형태를 지정해주는 것이라고 부를 수 있으며, 영어 철자 그대로 Data Type이라고 부른다.


기본적인 데이터 타입들은 언어의 컴파일러를 만든 사람들이 구분 짓고 있다. 기본적인 구분은 수와 문자의 분류이며 수는 정수와 실수로 구분되고, 정수는 작은 수와 큰 수 그리고 실수는 정밀한 실수와 덜 정밀한 실수로 나누고 있다. 이러한 구분은 일반적으로 컴퓨터 내에서 하나의 데이터를 표현하기 위해서 어느 정도의 메모리를 사용하고 있느냐에 따라 분류된다. 그리고 각각의 구분법은 이미 언어 내에 정의되어 있으며 우리는 그 규칙을 지키면서 사용하여야 하다. 그렇다면 데이터 타입이 어떠한 역할을 하는지 정확하게 따져 보자.

1.2 데이터 타입의 역할

데이터라는 관점에서 두 가지 분류를 할 수 있다. 즉, 다음과 같이 데이터를 구분 짓는 데이터 타입과 데이터 자체로 나눌 수 있다.
    - 데이터 타입
    - 데이터
자바에서 사용되는 데이터 타입은 수를 표현하는 int, long, float, double 등, 문자를 표현하기 위한 char 그리고 참과 거짓을 표현하기 위한 boolean이 있다. 이러한 데이터 타입을 사용하는 것은 그렇게 어렵지 않다. 단지 어떤 식으로 사용하느냐가 문제이다. 간단하게 정의를 내린다면, 데이터 타입은 데이터의 형태가 이렇다고만 지정할 뿐 그 자체를 사용하는 것은 아니다. int 자체를 사용할 수는 없다. 데이터 타입은 저 혼자서 아무 일도 할 수 없다.
데이터는 보통 우리가 말하는 정보 그 자체이다. 예를 들어, 3은 데이터이다. 그리고 ‘a‘라는 문자 또한 데이터이다. 이러한 데이터를 구분 짓는 것이 바로 데이터 타입이다.
데이터타입의 쓰임새와 데이터의 관계는 다음과 같다.
    - 변수에 데이터의 형태를 지정한다.
    - 데이터 타입은 변수를 만드는 역할을 한다.
    - 데이터 타입이 지정되어진 변수에는 데이터를 넣을 수 있다.
데이터 타입은 모양만을 지정하기 때문에 데이터 타입 스스로 아무 일도 할 수 없다. 말 그대로 형태만 있을 뿐 보이지도 않고 스스로 존재할 수도 없는 아주 불쌍한 놈이다. 일단, 자바에서 사용되는 데이터 타입이 어떤 것이 있는가를 보고 넘어가자. 자바 언어에서 사용하는 대표적인 데이터 타입은 다음과 같다.

 

 정수형

실수형 

 문자형

 논리형

데이터 타입

int

long

float

double

char

boolean

데이터

0

0L

0.0f

0.0d

'a'

false

byte 수

4

8

4

8

2

1

이 이외에도 약간씩 변형된 기본 자료형이 몇 가지 더 존재한다. 위의 표에서 알 수 있듯이 데이터 타입은 데이터의 분류법이다. 그런데, 이상하게도 각각의 데이터 타입에 "byte 수"라는 것을 표시하고 있다. 이 의미는 “데이터 타입은 변수에 데이터의 형태를 지정한다. 데이터 타입은 변수를 만드는 역할을 한다”라고 말한 부분과 관련이 있다. 하나의 변수를 만드는데 그냥 만들 수는 없다. 즉, 컴퓨터내에 사용할 변수를 만드는데 그 변수에 어떠한 데이터가 들어 갈 수 있는지는 명시해야 하지 않을까 그래서 변수를 만들 때 어떠한 데이터가 들어가며 ? 메모리는 몇 바이트나 차지하는지를 명시해주는 것이다. 메모리를 차지하는 바이트 수는 데이터 타입에 따라 다르게 지정된다.
데이터 타입은 형태이기 때문에 모양만을 가지고 있다. 실제 사용하기 위해서는 다른 방법을 사용한다. 이미 설명했듯이 변수라는 것을 사용한다. 컴퓨터의 메모리 속에서 형태 그 자체만으로는 아무런 의미가 없다. 형태에 이름을 부여한다면 컴퓨터의 메모리 속에서 특정한 형태의 메모리가 생성되며 이 메모리를 가르키는 이름이 바로 변수가 된다. 그래서 데이터 타입은 변수를 만드는 일을 한다고 한 것이다.
정리를 해 보자. 데이터 타입은 형태만을 나타낼 뿐 메모리 속에서는 존재할 수 없다. 존재할 수 없다는 것은 답답한 일인데 이것을 존재하게 만들 수 있도록 만드는 방법은 바로 변수라는 것을 만들어 존재하게 한다. 이름을 주는 것이다. 데이터 타입이 하는 일은 바로 변수를 생성하는 일이다. 어떠한 모양의 변수를 만들지를 결정하는 것이 바로 데이터 타입을 결정하는 일이다. 아래의 예제에서 int a라고 한 부분에서, int는 데이터 타입이 된다. 그리고 a는 변수이다. 이렇게 하면, int 모양의 메모리를 가진 a라는 이름의 변수가 생성되어지고 이제부터 a에는 int 모양의 값을 넣을 수 있다. 데이터 타입에 관련된 간단한 예제를 하나 살펴보자.

1.3 Test.java
변수의 개념을 설명하기 위한 예제

    public class Test1{
        public static void main(String[] args) {
            int a = 1; // int type의 a 변수선언
            int b = 2; // int type의 b 변수선언
            int c = a + b; // int type의 c 변수선언
            System.out.println("a b 의 합은 : " + c); // c의 결과 출력
        }
    }

   이 예제를 컴파일 후 실행하면 다음과 같은 결과가 나올 것이다.

   a b 의 합은 : 3

이 예제는 데이터 타입이 존재하는 방식을 증명해 주고 있다. a, b, c는 int 형태의 데이터 타입이며 a, b, c라는 이름으로 메모리에 존재하게 되는 것이다. 이것은 아주 간단해 보이지만, 데이터 타입을 사용하는 방법을 잘 보여 준다. 먼저 변수 이름을 정하기 전에 타입을 명시해 준 후 개별적인 이름을 부여하고 있다. 이름은 어떻게 부여하느냐? 사소한 규칙 몇 가지만 지킨다면 이것을 만드는 사람 임의로 만들 수 있다. 그리고 int a라고 한다면, int 타입의 4바이트의 메모리가 a라는 이름으로 생성이 되었다는 것을 의미한다. 그리고 다시 b, c라고 했기 때문에 전체 12바이트의 메모리를 할당한것이다.

1.4 결론
결론적으로 데이터 타입 변수 데이터의 관계는 필연적인 관계이다. 데이터 타입은 변수를 생성하는일이다. 변수를 생성할 때 데이터 타입은 어떠한 형태의 변수를 지정할 지, 몇 바이트나 되는 메모리를 할당할 지를 결정하는 역할을 한다. 그리고 만들어진 변수에는 데이터를 넣는다.
데이터 타입에 대해서 자세하게 설명을 붙이는 이유는 다른데 있다. 지금까지는 만들어져 있는 데이터 타입만을 사용했다. 그런데, C++이후의 언어에서는 우리가 직접 만든 데이터 타입을 사용하게 된다. 이것을 사용자 정의 데이터 타입이라 부르며 자바에서는 클래스라고 부른다.
자바 프로그래머를 시작하는 대부분의 사람들이 데이터 타입의 역할을 이해 못하고 있고, 데이터 타입을 제대로 이해한다고 해도 많은 혼선을 경험하고 있기 때문에 데이터 타입에 대하여 정확한 설명을 붙이고 있다. 참고적으로, 이 데이터 타입의 의미는 모든 언어에 공통적으로 사용되는 아주 기본적인 사항이다. 이것만을 알고 들어가도 자바는 쉬워진다.


2 변수

2.1 변수란?
변수란 데이터를 담을 수 있는 그릇이다. 데이터 타입이 변수를 만든다면 변수는 그 속에 데이터 타입에 명시된 형태의 데이터를 담을 수 있다. 데이터 타입으로 변수를 만든다는 것은 메모리 속에 데이터 타입에서 명시한 모양의 메모리를 생성할 수 있다. 그리고는 그 메모리에 어떠한 데이터를 넣는데, 그 데이터는 데이터 타입에 명시된 데이터라야 된다는 것이다. 이것을 정리하면
    - 데이터 타입이 변수를 만들 수 있다.(변수 생성)
    - 변수가 만들어진다는 것은 메모리 생성의 의미이다. (변수 생성 = 메모리 생성)
    - 생성된 변수에는 해당 데이터 타입의 데이터를 넣을 수 있다.(할당)

이러한 방식으로 데이터, 데이터 타입의 중간자 역할을 하는 변수 그리고 데이터 타입으로 세분화시켜 볼 수 있다.

2.2 변수의 존재
변수는 데이터타입 없이는 홀로 존재할 수 없다. 즉, 데이터타입이 자신(변수)의 형태를 지정해 주기 때문에 존재하는 것이다. 이것은 반드시 지켜져야 되는 규칙이며, 이 규칙을 깨는 법은 절대 용납되어서는 안 된다고 생각하면 된다. 데이터타입의 허락을 얻어야만 하나의 변수로서 역할을 할 수 있으며, 변수는 메모리에 존재의 의미를 그대로 담고 있다. 데이터타입은 홀로 메모리를 생성 할 수 없는 불쌍한 놈이다. 자신이 존재하기 위해서는 변수라는 것을 통해서 자신의 형태를 존재하게 하는것이다.
철학적으로 정리를 해 보자. 데이터타입은 모양만을 가지고 있는 무존재이며, 변수는 데이터타입을 정해주면 메모리에 존재할 수 있는 존재의 의미를 담고 있다. 이것을 잊어버리면 거의 프로그램을 만든다는 의미는 없다고 봐도 과언이 아니다. 보통의 변수가 존재하는 법은 다음과 같다.

2.3 변수의 생성
    int x;
    int a, b;
    long z;
앞에서 언급한 것과 같이 데이터타입 변수명 의 “ “ 형식을 따르게 된다. 이러한 방식으로 데이터 타입과 변수를 사용하는 것이다. 한번 더 밝혀 두지만, 데이터타입 혼자서만은 아무 것도 할 수 없으며 변수가 존재하기 위해서는 반드시 데이터 타입을 지정해야만 한다. 이것은 불변의 규칙이다.

2.4 결론
변수를 만드는 이유는 데이터를 보관하기 위해서 이다. 데이터 타입으로 변수를 만들며, 변수는 데이터를 담을 수 있는 그릇의 역할을 하다. 변수에 아무 것도 넣지 않으면 필요가 없다. 그렇다면 뭔가를 변수에 넣어야 변수의 역할을 하게 된다. 데이터 타입은 단순히 해당하는 형태의 메모리를 생성할 뿐 더 이상의 일은 하지 않고, 변수는 데이터를 보관할 수 있는 일을 한다. 여기에 들어가는 데이터는 반드시 변수를 만들 때 명시한 데이터 타입에 맞는 데이터의 형을 넣어야 한다는 것이 핵심이다.
변수는 데이터타입의 주어진 형태대로 메모리를 생성한 후 컴퓨터 내에 존재하며, 변수가 생성 된 후에는 주어진 형태에 맞는 데이터를 넣을 수 있다. 그리고 변수를 아무리 많이 만들어도 어떠한 데이터를 넣지 않으면 필요가 없다. 이 데이터는 변수를 만들 때 사용한 데이터타입에 맞는 형의 데이터를 넣어야만 한다는 것은 모든 언어의 아주 기본적인 특징이다. 계속해서, 우리는 변수에 들어가는 데이터이라는 측면과 특정 데이터를 변수에 넣는 방법이라는 측면에서 상수와 할당이라는 것에 대해 자세히 알아보자.

3 상수

1.3.1 상수란?
상수는 그 자체가 데이터라는 것을 의미한다. 다른 말로 하면 상수는 항상 수, 항상 데이터라고 할 수 있다. 변수의 의미는 데이터를 보관하는 일이지만 데이터 그 자체를 말할 때 우리는 상수라는 단어를 사용한다. 상수가 데이터라고 한다면 당연히 자료의 구분 즉, 데이터 타입의 분류가 있다. 모든
자료는 데이터 타입의 관점에서 분류할 수 있으며 분류에 따른 표현법도 있다. 이러한 분류법과 표현법에 따라서 해당 데이터 타입에 관련된 각각의 상수들이 존재한다. 물론 이렇게 세분화시켜서 분류하는 이유는 바로 보다 인간보다 컴퓨터가 더 까다롭기 때문이다. 컴퓨터는 정확하게 가르쳐주지 않으면 모르는 바보이다.

3.2 상수의 분류와 표현
자료의 데이터 타입에 따른 분류와 표현은 아주 간단하다. 앞에서 배운 데이터 타입, 그 자체가 분류가 되며 그 분류에 따라서 표현되어지는 방법이 다르다. 이것을 구분 지어보면 다음과 같다.

데이터의 분류와 표현법

 

정수형

실수형

문자형

논리형

데이터타입

int

long

float

double

char

boolean

byte 수

4

8

4

8

2

1

표현법

0, 100

100L

0.0f

0.0d

'a', 'c'

false, true

 * float d = 0.0f; // f를 붙이지 않으면 디폴트로 double이 된다.

변수에 할당하는 상수의 표현
    - int : 10진수로 표현
    - char : 작은 따옴표로 묶는다.
    - long : 숫자 뒤에 l(영문자L)을 붙인다.
    - float : 숫자 뒤에 f를 붙인다.
    - double : 숫자 뒤에 d를 붙인다.
* int형과 long형 모두 1이라는 숫자를 포함하고 있다. 이러한 구분을 하기 위해서 상수 뒤에 형에 맞는 문자를 붙이게 된다. float형과 double형도 같은 원리에 의해서 구분된다.

위의 표에서와 같은 표현법을 사용해서 상수를 표시하고 그 상수를 적절한 데이터형에 맞는 변수에 넣어야만 프로그램 언어에서 컴파일할 때 에러가 나지 않는다. 이 형에 대한 컴파일러의 점검은 아주 엄격하며, 이 규칙을 무시하고 사용했을 때는 컴파일러는 언제나 그런 것처럼 무차별적으로 에러를 발생시킨다.
‘a’, ‘b’, ‘A’, ‘B’ 등의 아스키코드와 1, 100, 200등의 정수 그리고 0.01f와 같은 실수는 프로그램 상에서 인식할 수 있는 상수이다. 이러한 상수의 개념은 이미 만들어져 있는, 우리가 바꿀 수도 없다는 의미에서 상수라고 부르기도 한다.
상수의 진정한 의미에 대해 한번 생각 해 보고 넘어가자. 상수는 그 자체가 수이며 내가 만든 것이 아니라 이미 만들어져 있는 것이다. 이미 만들어져 있는 것이라는 의미는 내가 만든 것이 아니며 내가 바꿀 수도 없는 것이라고 생각하면 된다. “100은 내가 만든 것이 아니며, 이미 존재하는 것이며,
내가 바꿀 수 없다”라는 말은 참이다. 일반적으로 우리가 알고 있으며 바꿀 수 없는 그러한 데이터를 상수라고 한다.
컴퓨터의 컴파일러는 이미 이러한 상수의 개념을 가지고 있다. 당연히 1, 2, 3, 100, 1000, 같은 수를
이미 알고 있으며 이것을 사용하여 계산을 한다. 즉 상수는 그 자체가 데이터의 의미를 담고 있으며 이 데이터는 바꿀 수 없는 진리의 데이터를 말한다.
상수의 느낌은 다음과 같다. “나무“라는 데이터가 있다. 물론, 이것은 스트링형의 데이터이다. 이제부터 “나무“를 “바보나무“라고 하겠다고 한다면, 어떻게 될까? 아마 현실세계에 이렇게 주장하고 다닌다면, 정말 바보 취급을 받을 것이다. 100이라는 숫자 형태의 데이터가 있다. 지금부터 100을 1000이라고 하겠다고 주장한다면 이 또한 같은 일이 발생한다. 결론적으로, 상수는 절대 바꿀 수 없으며, 그 자체로 데이터의 의미를 담고 있으며, 미리 우리가 알고 있는 진리라고 할 수 있다. 바로 이러한 면이 상수의 느낌이다.
앞에서 이미 언급했지만 데이터 타입은 무 존재로서 결코 혼자서는 존재할 수 없으며 이것이 존재하는 방식은 변수의 방식으로 존재하게 된다 이 존재의 . 공간에 담을 수 있는 데이터를 우리는 상수라고 부르며 상수 자체는 이미 존재하고 있는 실존의 의미를 담고 있다. 이러한 원리를 아래의 표와
같다.

종류

 존재여부

데이터 타입

변수

상수

 무 존재

존재

실존

컴퓨터 언어를 배우면서 이러한 아주 단순한 원리를 거의 무시하기 때문에 처음 접하는 이들이 당황하고 결코 쉽게 느낄 수 없을지도 모른다.

3.3 결론
데이터 타입은 변수를 생성하여 존재하게 하고, 존재하는 변수의 빈 그릇에는 상수를 넣는 것, 이것을 다시 컴퓨터의 언어와 연결하여 나타내면 다음과 같다.

int a = 3; 에 대한 분류

종류

존재여부

예 

데이터 타입

변수

상수

무 존재

존재

실존

int

a

위의 표에 표시되어 있는 “int a = 3;“에서 우리는 데이터 타입과 변수, 상수의 사용을 정확하게 볼 수 있다. 데이터 타입 int라는 것으로 변수 x를 선언하였으며 x에는 3을 할당하고 있다.
이쯤에서, 우리는 변수와 상수사이의 또 다른 관계를 찾아 볼 수 있다. 변수에 데이터를 넣은 방법이라는 관점에서 본다면, 우리는 이것을 할당이라는 말을 사용한다.

4 할당의 법칙

4.1 할당이란
변수에 데이터를 넣는 것을 할당(assignment)이라고 한다. 할당의 법칙은 변수를 선언하고 난 후, 변수에 값을 넣는다라고 말할 수 있다. 이때 이용되는 연산자가 바로 “=“ 연산자이다. “=“ 연산자는 직접 할당의 의미를 가지고 있으며 이것은 변수에 값을 넣는다는 의미를 가지고 있지만 “=“ 자체에서 풍기는 맛은 바로 데이터 타입에 맞는 타입의 값을 할당해 달라는 의미를 가지고 있다.

4.2 할당의 기본 법칙
변수에 상수를 할당하는 방법론도 여러 가지 방식으로 가능하다. 이러한 방법을 알아보자.
가장 기본적인 방법론은 다음과 같다.
    - 오른쪽에서 왼쪽으로만 할당 가능하다.(절대적)
    - 변수끼리도 할당 가능하다.(오른쪽에서 왼쪽으로 할당)
    - 변수에 이미 상수가 존재하더라도 다른 것을 할당하면 마지막에 할당한 것이 할당된다.

우리는 쉽게 할당을 하지만 그 기본원리는 항상 있기 마련이다. 위의 규칙은 너무 단순하면서도 꼭 지켜지고 있는 규칙이다. 위의 규칙을 이용한 몇 가지 예를 살펴보자.

할당의 예
    - 선언과 할당을 동시에 : int a = 100
    - 선언과 할당을 분리 : int a; a=100
    - 여러 개를 동시에 선언과 할당 : int a=100, b=200;
    - 분리하여 여러 개를 동시에 선언과 할당 : int a, b; a=100, b=200;
    - 변수끼리의 할당 : int a=100, b; b=a;

위의 수식에서 우리는 지금까지 설명한 모든 것을 다 밝히고 있다. 선언하는 방법과 선언과 동시에 할당하는 방법 등.... 할당과 선언의 방법이 몇 가지 존재하지만 모두 같은 방식이며 일정한 규칙을 따르고 있다. 만약 다음과 같은 예를 본다면 할당의 완전한 법칙을 이해 할 수 있을 것이다.
할당의 기본 법칙의 예
    int sum = 100;
    sum = sum + 200 ;

위의 예에서 sum은 왼쪽과 오른쪽 모두 존재한다. 하지만 오른쪽에서 왼쪽으로 할당되기 때문에 “sum + 200“이 먼저 작업이 이루어진 뒤, 최종적으로 sum에 처리된 결과가 할당되는 것이다. 이러한 원리에 따라 처리하면 결과 값은 당연히 300으로 나오는 것을 짐작할 수 있을 것이다.

4.3 할당에 관련된 implementation
다음의 예제는 0부터 99까지의 합을 출력하는 프로그램이다. sum 변수와 i 변수의 역할을 지금까지 내용을 생각하며 관찰해 보자.
할당을 이해하기 위한 예제
    Test2.java
    public class Test2 {
        public static void main(String[] args) {
            int sum = 0;
            for (int i=0;i<100 ;i++ ) {
                sum = sum + i;
            }
            System.out.println("sum은 :" + sum);
        }
    }

sum은 :4950

4 마무리

데이터 타입(Datatype)이란 데이터에 대한 형태를 의미한다. 수많은 프로그래밍 도서등에서 같은 말을 반복하고 있지만 여전히 그냥 넘어가는 부분일지도 모른다. 데이터 타입, 변수, 상수의 관계를 확실히 이해한다면 자바 언어 자체를 편하게 이해 할 수 있을 것이다. 그 다음으로 변수와 상수에 대해 알아 보았으며, 마지막으로 변수와 상수의 관계에서 나타나는 할당이라는 것을 알아보았다.

이로써 클래스의 배경이 되는 몇 가지 기초 상식에 대해서 알아 보았다. 기초라고 해서 얕보기 쉬운데 약간의 자바 경험이 있다면 이 부분이 얼마나 무시하기 힘든 부분인지 정확하게 알게 될 것이다. 클래스의 배경에 대해서 설명하는 것은 클래스 그 자체를 설명하기 위해서는 데이터 타입과 변수, 상수, 할당의 개념을 반드시 이해해야 하는 내용이기 때문이다.

자바를 비롯하여 다른 어떤 언어를 시작한다고 해도 이 글과 다음 글에 있는 개념은 꼭 알려 주고 싶은 정보이다.

※ 정보보안기사에 나오는 법 종류

- 정보통신망 이용촉진 및 정보보호 등에 관한법률(줄여서 정보통신망법 또는 망법 / 개인 정보보호, 기타 정보보호에 관한 조항만)

-- 개인정보 기술적/관리적 보호조치 기준(2012/08/23) : 걍 참고만

- 정보통신기반 보호법

- 정보통신산업 진흥법

- 전자서명법

- 개인정보보호법

-- 개인정보의 안전성 확보 조치 기준(2014-229호)

- 우리나라 법률 정보는 국가법령정보센터(http://www.law.go.kr/main.html)에서 쉽게 열람가능!! PDF로도 추출가능

 



2. 정보보호 관련법규(6문제/20문제)

(1) 정보통신망 이용촉진 및 정보보호 등에 관한 법률(※ 개인정보보호, 기타 정보보호 관련조항에 한정)

1) 용어의 정의

- 정보통신망

- 정보통신서비스

- 정보통신서비스 제공자

- 이용자

- 전자문서

- 개인정보 : 생존하는 개인에 관한 정보로써(성명/주민번호 등), 특정한 개인을 알아볼수 있는 부호/문자/음성 등의 정보

-- 각각 정보 하나하나로 개인을 구분못해도, 다른 정보와 결합해 구분이 가능하면 그것도 개인정보

- 침해사고 : 해킹/바이러스 등으로 정보통신망 또는 관련된 정보시스템을 공격하는 행위

- 정보보호산업

- 전자적 전송매체


2) 정보통신망이용촉진 및 정보보호 등 시책

- 미창부장관 또는 방통위는 정보통신망 이용촉진 및 안정적 관리 운영과 이용자의 개인정보보호 등을 통해  정보사회의 기반을 조성하기 위한 시책을 마련해야 함

-- 정보통신망에 관련된 기술의 개발/보급

-- 정보통신망 표준화

-- 정보내용물 및 11조에 따른 정보통신망 응용서비스의 개발 등 정보통신망의 이용 활성화

-- 정보통신망을 통하여 수집/처리/보관/이용되는 개인정보 보호 및 그와 관련된 기술의 개발 보급

-- 정보통신망에서의 청소년 보호

-- 정보통신망의 안전성 및 신뢰성 제고

-- 그 밖의 정보통신망 이용촉진 및 정보보호 등을 위하여 필요한 사항

- 미창부장관과 방통위가 위에 제시한 시책을 만들 때, 국가정보화기본법 제6조에 따른 정보화 기본 계획과 연계되도록해야함


3) 개인정보보호 / 4) 정보통신망의 안정성 확보 / 5) 정보통신망 침해행위

- 개인정보보호법과 유사하지만 차별적인 요소가 있음

- 개인정보수집/이용 및 제공(22조)

-- 정보통신 서비스 제공자가 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- ※ 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

-- 다음은 동의없이도 수집이용가능

--- 정보통신서비스 제공에 관한 계약을 이행하기 위해 필요한 개인정보로서 경제적, 기술적은 사유로 통상적인 동의받는게 뚜렷하게 곤란할 때

--- 정보통신서비스 제공에 따른 요금정산을 위하여 필요한 경우

--- 이 법(망법) 또는 다른 법률에 특별한 규정이 있는 경우

- 개인정보수집 제한 등(23조)

-- 개인정보수집금지 : 사상/신념/가족 및 친인척관계/학력/병력 등 권리 이익이나 사생활을 뚜렷하게 침해할 우려가 있는 경우

-- 수집 허용 : 이용자의 동의나 다른 법률에 허용된 경우

-- 서비스 거부 : 이용자가 최소한의 개인정보 밖에 안알려줬다고 서비스 거부 안됨

- 주민등록번호 사용제한(23조의 2)

-- 다음의 경우를 제외하고 이용자의 주민등록번호를 수집/이용 불가

--- 본인확인기관

--- 법령에서 이용자의 주민등록번호의 수집/이용을 허용하는 경우

--- 주민등록번호의 수집/이용이 불가피한 정보통신서비스 제공자로서 방통위에서 고시한 경우

-- 주민등록번호를 수집/이용 가능하여도, 대체수단(주민번호말고 따른 인증수단)을 제공해야 함

--- 아이핀 / 공인인증서 / 원타임패스워드(OTP)

- 개인정보 이용제한(24조)

-- 수집한 개인정보를, 동의받지 않은 목적(이용목적)으로 이용해서는 안됨

-- 이용목적이 변경되었을 땐 다시 동의받아야 해

- 개인정보의 제공동의(24조의 2)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

- 개인정보취급위탁(25조)

-- 위탁은 걍 하청업체에다가 정보주고 너네 이부분 알아서해시키는거

-- 취급위탁의 경우에도 다음의 내용을 이용자에게 알리고 동의를 받아야 함

--- 개인정보 취급위탁을 받는자(수탁자)

--- 개인정보 취급위탁을 하는 업무의 내용

-- ※ 망법에서는 취급 위탁시 동의를 받아야 하지만 개인정보보호법에서는 고지만 함

- 개인정보의 양도 양수(26조)

-- 정보통신서비스 제공자 등이 영업의 전부나 일부가 양도/합병으로 개인정보를 타인에게 이전하는 경우 다음의 내용을 알려야함

--- 개인정보를 이전하려는 사실

--- 개인정보를 이전받는자의 성명(법인명) / 주소 / 전화번호 및 그 밖의 연락처

--- 개인정보의 이전을 원치않은 경우, 그 동의를 철회할 수 있는 방법과 절차

-- 인터넷 홈페이지의 게시 / 전자우편 등 대통령령으로 정하는 방법에 따라 이용자에게 알림(바로 아래 시행령에 정의)

-- 양도자가 개인정보의 이전 사실을 알린경우, 양수자는 할 필요는 X

- 개인정보 동의 받는 방법(동법 시행령 12조) : 바로 위의 개인정보 양도 양수할 때 알리는 방법

-- 인터넷 사이트에 게재하고 동의 여부를 표시하도록

-- 동의 내용이 기재된 서면을 이용자에게 직접 교부/우편/모사 전송 → 이용자가 동의 내용에 대해 서명날인 후 제출하도록

-- 동의 내용이 담긴 전자우편 발송해 이용자로부터 동의의 의사표시가 적힌 전자우편 받는 방법

-- 전화를 통해 동의 내용을 알리고 동의 얻기

- 개인정보 관리책임자 지정(27조)

-- 정보통신서비스 제공자 등은 개인정보를 보호하고 개인정보와 관련한 이용자의 고충을 처리하기 위해 개인정보 관리 책임자를 지정

--- 예외 : 인터넷으로 사업시 5명 미만 / 전년도 말 기준 직전 3개월 일일평균 이용자 1천명 이하

-- 자격 : 임원 / 개인정보와 관련해 이용자의 고충처리를 담당하는 부서의 장 이 될 수 있음

-- 지정안하면 사업주나 대표자가 개인정보 관리책임자

- 개인정보 취급방침의 공개(27조의 2)

-- 개인정보 취급방침은 인터넷 홈페이지 첫 화면 제일 하단에 '개인정보취급방침'이라고 볼드체, 다른 색상으로 표현

--- 인터넷 홈페이지가 없으면 점포나 사무실에 써 붙이거나 비치

-- 개인정보 취급방침의 내용

--- 개인정보의 수집/이용 목적, 수집하는 개인정보의 항목 및 수집방법

--- 제 3자에게 제공시, 제공받는 자의 성명(법인명) / 제공받는자의 이용목적 / 제공하는 개인정보의 항목

--- 개인정보의 보유 및 이용 기간 / 개인정보의 파기절차 및 파기 방법

--- 개인정보 취급위탁을 하는 업무의 내용 및 수탁자

--- 이용자 및 법정대리인의 권리와 행사방법

--- 개인정보를 자동으로 수집하는 장치의 설치/운영 및 거부에 관한 사항

--- 개인정보 관리책임자의 성명 / 개인정보보호 업무를 하는 부서의 명칭과 연락처

- 개인정보 누출 등의 통지 신고(27조 3)

-- 개인정보 털린사실(분실/도난/누출) 알고나면, 지체없이 다음 내용 이용자에게 알리고 방통위나 KISA에 신고

--- 분실/도난/누출이 된 개인정보 항목

--- 분실/도난/누출이 발생한 시점

--- 이용자가 취할 수 있는 조치

--- 정보통신서비스 제공자 등의 대응 조치

--- 이용자가 상담 등을 접수할 수 있는 부서 및 연락처

-- 물론, 확인된 내용만 우선적으로 신고/통지하고 이후에 알게 되자마자 바로 신고/통지

-- 정당한 사유가 있는 경우, 위의 내용을 인터넷 홈페이지에 30일 이상 게시함으로써 대체 가능

-- 천재지변이나 정당한 이유로 홈페이지가 불가능하면, 전국에 보급되는 둘 이상의 일반일간신문에 1회 이상 공고

-- 신고받은 KISA는 방통위에게 즉시 알려야 함

- 개인정보의 보호조치(28조)

-- 다음의 기술적/관리적 보호 조치를 해야 함

--- 내부관리계획수립시행 / 접근통제장치설치운영 / 접속기론위변조방지 / 전송저장 암호화 / 바이러스침해방지 / 기타 안정성 확보

- 개인정보의 파기(29조)

-- 개인정보는 목적을 달성하면 지체없이 복구/재생할 수 없도록 파기

-- 특별한 사유 없을 때, 보유기간은 최소 1년에서 3년

-- 개인정보 파기 통지는 30일전에 개인정보가 파기되는 사실과 언제 파기하는지 알림

--- 우편 / 서면/ 모사전송 / 전화와 같은 유사한 방법으로 알려야 함

- 개인정보 이용내역의 통지(30조 2)

-- 다음의 기준을 만족하는 정보통신서비스 제공자 등은 주기적으로 이용자에게 개인정보 이용내역을 통지해야 함

--- 전년도 말 기준 직전 3개월간 일일평균 100만명 이상

--- 정보통신서비스부분 매출액이 100억원 이상 정보통신서비스 제공자

-- 통지 내역

--- 수집/이용 목적 및 수집한 개인정보 항목

--- 개인정보를 제공받은 자와, 그 제공 목적 및 제공한 개인정보 항목

--- 개인정보 취급위탁을 받은자와 그 취급위탁을 하는 업무 내용

-- 통지 횟수 : 연 1회 이상 (우편 / 서면 / 모사전송 / 전화와 같은 유사한 방법으로)

- 손해배상 및 법정 손해배상청구(32조, 32조의 2)

-- 고의/과실에 따른 개인정보 분실/도난/누출의 경우, 이용자가 정보통신서비스제공자를 상대로 300만원 이하의 손해배상 청구 가능

--- 정보통신서비스 제공자는 고의나 과실 책임이 없음을 입증해야 함

- 정보보호 사전점검(45조 2)

-- 정보통신서비스 제공자가 새로  정보통신망을 구축하고나 제공하고자 할때, 정보보호와 관련된 사항을 고려해야 해

- 정보보호 최고 책임자의 지정(45조 3)

-- 정보통신시스템 등 보안 및 정보의 안전한 관리르 위해 임원급의 정보보호 최고책임자를 지정가능

--- 종업원 수, 이용자 수 등이 기준에 해당하면 필수로 지정하고 미창부장관에게 신고해야 함

-- 정보보호 최고책임자의 업무

--- 정보보호관리체계의 수립 및 관리/운영

--- 정보보호 취약점 분석/평가 및 개선

--- 침해사고의 예방 및 대응

--- 사전 정보보호대책 마련 및 보안조치 설계/구현 등

--- 정보보호 사전 보안성 검토

--- 중요 정보의 암호화 및 보안서버 적합성 검토

--- 그 밖의 정보보호를 위해 필요한 조치의 이행

- 정보보호관리체계(ISMS)(47조)

-- 미창부 장관은 ISMS를 수립/운영하고 있는 자에 대해 기준에 적합한지에 관하여 인증을 가능

-- 다음의 경우 중, 하나만 만족해도 무조건 ISMS 인증 받아야 해

--- 정보통신망서비스 제공하는 자

--- 직접정보통신시설 사업자

--- 전년도 매출액이 100억원 이상 / 전년도 말 기준  직전 3개월간 일일평균 이용자 100만명 이상

-- ISMS 인증의 유효기간은 3년임

-- 미창부장관은 KISA나 미창부장관이 지정한 기관(ISMS 인증기관)에게 인증을 수행하게 할 수 있음

--- ISMS 인증 심사 수행 기관 : KISA / 한국정보통신진흥협회

- 개인정보관리체계인증(PIMS)(47조 3)

-- ISMS와는 다르게 아직 의무사항이 아님(권고사항)

-- 이건 방통위가 인증하고, 따로 수행기관을 지정가능해

- 정보보호관리등급(47조 5)

-- ISMS 인증을 부여받은 기관이나 기업은 일괄적인 인증이 아니라, KISA로부터 정보보호 등급을 부여받을 수 있음

-- 미창부장관이 관리등급 부여하는거고, KISA가 대신 수행가능



(2) 정보통신 기반 보호법

1) 용어의 정의

- 정보통신기반시설

- 전자적침해행위

- 침해사고


2) 주요정보통신기반시설 보호체계

3) 주요정보통신기반시설의 지정과 취약점 분석

4) 주요정보통신기반시설의 보호 및 침해 사고의 대응

- 정보통신기반보호위원회(3조)

-- 정보통신기반시설의 보호에 관한 사항을 심의하기 위해, 국무총리 소속하에 정보통신기반보호위원회를 둠

-- 위원장 1인을 포함한 25인 이내의 의원으로 구성

--- 위원장은 국무조정실장

-- 효율적 운영을 위해, 공공분야와 민간분야를 각각 담당하는 실무 위원회를 둠

- 정보통신기반보호위원회의 기능(4조)

-- 주요 정보통신기반시설 보호정책 조정이나 제도개선에 대한 사항과 주요 정책

-- 위원장이 부의하는 사항을 심의

- 주요 정보통신기반시설보호대책의 수립(5조)

-- 주요 정보통신기반시설을 관리하는 기관은 정보통신기반시설보호대책을 수립/시행해야 함

--- 수립/시행의 결과를 관계주요행정기관의 장에게 제출해야 함

-- 관리기관의 장은 정보보호책임자를 지정해야 함

- 주요 정보통신기반시설보호대책 이행여부의 확인(5조 2)

-- 미창부장관과 국정원장은 관리기관에 대해 정보통신기반시설보호대책의 이행여부 확인가능

- 주요 정보통신기반시설 계획의 수립 등(6조)

-- 관계중앙행정기관의 장은 정보통신기반보호위원회에게 전년도 추진실적과 다음연도 계획을 제출하고 심의받아야 함

--- 취약성 평가분석 / 침해사고 복구대책 / 그 밖의 대책

- 주요 정보통신기반시설의 보호지원(7조)

-- 관리기관의 장은 미창부, 국정원장 등에게 정보통신시설의 대책, 침해사고 예방복구 등에 대한 기술지원 가능

--- 국정원장은 금융/정보통신기반시설에 개인정보가 저장된 모든 정보통신기반시설 기술지원은 X

---- 국정원도 안되는게 있구나



(3) 정보통신산업 진흥법

1) 지식정보보안컨설팅 전문업체

- 지식정보보안컨설팅 전문업체(33조)

-- 주요 정보통신기반시설의 취약점 분석/평가 업무나 보호대책 수립업무를 신뢰성 있게 수행할수있다고 인정받은 업체

-- 미창부장관이 지정하게 되네

-- 업체지정은 법인으로 한정되고, 3년간의 유효기간이 있음(재지정 받을수있지 당연히)

- 지식정보보안컨설팅 전문업체 결격 사유(34조)

-- 뭐...생략

- 지식정보보안컨설팅 전문업체의 양도/합병 등(35조)

-- 양수인이 자격도 있어야 되고, 미창부장관에게 신고해서 수리 받아야 지식정보보안컨설팅 전문업체의 지위를 승계받음

- 지식정보보안컨설팅 전문업체 휴/폐업, 재개(36조)

-- 휴업/폐업, 재개하려는 날의 30일전까지 미창부장관에게 신고

- 자료의 기록 보존(39조)

-- 주요 통신기반시설의 취약점 분석/평가 업무와 관련하여 작성한 기록 및 자료를 안전하게 보존해야함

--지식정보보안컨설팅 전문업체에서 취소되거나 폐업하면, 주요 통신기반시설의 장에게 자료를 반환하거나 폐기

- 지식정보보안산업협회 설립(40조)

-- 미창부장관의 인가를 받아 지식정보보안산업협회를 설립가능

-- 지식정보보안산업협회는 법인으로 함



(4) 전자서명법

1) 용어의 정리

- 전자문서

- 전자서명

- 공인전자서명

- 전자서명생성정보

- 전자서명검증정보

- 인증

- 인증서

- 공인인증서

- 공인인증업무

- 공인인증기관

- 가입자

- 서명자

- 개인정보


2) 전자서명의 효력

- 전자서명의 효력(3조)

-- 공인전자서명이 있는 경우에는, 당해 전자서명이 [서명자의 서명, 서명날인 또는 기명날인이고], 당해 전자문서가 전자서명된 후 그 내용이 변경되지 아니하였다고 추정


3) 공인인증기관

- 공인인증기관의 지정(4조)

-- 미창부 장관이 공인인증기관을 지정할 수 있어

-- 공인인증기관으로 지정받을 수 있는 건 국가기관 / 지방자치단체 / 법인에 한해

-- 현재 : 한국정보인증(주), (주)코스콤, 금융결재원, 한국전자인증(주), 한국무역정보통신

- 공인인증업무 준칙(6조)

-- 공인인증기관은 업무 개시전에, 공인인증업무준칙을 작성해 미창부장관에게 신고해야 함

--- 인증업무종류 / 인증업무의수행방법및절차 / 공인인증역무의 이용조건 / 기타 인증업무 수행에관하여 필요사항


4) 공인인증서

- 공인인증서 발급(15조)

-- 공인인증서를 발급받고자하는 자의 신원을 확인해야 함

-- 공인인증기관이 발급하는 공인인증서에는 다음의 내용이 포함되어야 함

--- 가입자의 이름(법인명)

--- 가입자의 전자서명검증정보

--- 가입자와 공인인증기관이 이용하는 전자서명 방식

--- 공인인증서의 일련번호

--- 공인인증서의 유효기관

--- 공인인증기관의 명칭 등 공인인증기관을 확인할 수 있는 정보

--- 공인인증서의 이용범위 또는 용도를 제한하는 경우 이에 관한 사항

--- 가입자가 제 3ㅈ라를 위한 대리권 등을 갖는 경우 또는 직업상 자격 등의 표시를 요청한 경우 이에 관한 사항

--- 공인인증서임을 나타내는 표시

- 공인인증서 효력소멸(17조???)

-- 공인인증서 유효기관이 경과한 경우

-- 공인인증기관의 지정이 취소된 경우

-- 공인인증서의 효력이 정지된 경우

-- 공인인증서가 폐지 된 경우

- 공인인증서의 효력정지(17조)

-- 가입자 또는 대리인의 신청이 있을 경우, 공인인증서의 효력을 정지하거나 정지된 공인인증서의 효력을 회복해야 함

-- 공인인증서 효력 회복의 신청은, 공인인증서 효력이 정지된 날로부터 6개월 이내여야 함


(5) 개인정보보호법

0) 걍 설명

- 2011년 9월 30일 제정되어 공공과 민간을 아우르는 일반법

- 정보통신망 이용촉진 및 정보보호 등에 관한 법률이 개인정보보호법 보다 우선

-- 정보통신망법에 특별한 규정이 있지 않은 이상, 개인정보보호법에서 정하는 바에 따름(6조)

- 대부분 공공기관과 준용사업자에게 적용되는 법률로, 광범위하게적용되는 개인정보보호관련 일반법

- 전반적으로 망법이랑 내용겹치는게 있어(몇 개 더 추가되고 그런거만 있찌..)


1) 용어의 정리

- 개인정보

- 처리

- 정보주체

-개인정보파일

- 개인정보처리자

- 공공기관

- 영상정보처리기기

- ※ 망법이랑 비교하면서 보기


2) 개인정보 보호위원회

- 개인정보 보호위원회(7조)

-- 개인정보 보호에 관한 사항을 심의/의결하기 위해 대통령소속으로 개인정보보호위원회를 둠

-- 위원장 1명, 상임위원 1명을 포함한 15명 이내의 위원으로 구성

--- 위원장은 공무원이 아닌사람으로 대통령이 위촉 / 임기 3년(1번 연임가능)

--- 상임위원은 정무직 공무원으로 임명

- 개인정보 보호위원회 기능(8조)

-- 허허ㅓ..


3) 개인정보의 수집, 이용, 제공 등 단계별 보호기준

- 개인정보의 수집/이용(15조)

-- 개인정보처리자는 개인정보 이용을 위해 수집할 때, 알리고 동의받아야 하는 것

--- 개인정보의 수집 이용 목적

--- 수집하려는 개인정보의 항목

--- 개인정보의 보유이용기간

--- 개인정보보호법에서는, 거부할 권한이 있다는것과 이에 따른 불이익도 알리고 동의받아야해

---- 이건 망법에 없는내용

- 개인정보 수집 제한(16조)

-- 동의를 받고 개인정보를 수집하더라도 최소한으로 수집해야 함

--- 최소한이라는 걸 입증할 책임도 개인정보처리자에게 있지

- 개인정보제공(17조)

-- 개인정보를 제 3자에게 제공할 때, 다음의 내용을 이용자에 알리고 동의받아야 함

--- 개인정보를 제공받는 자

--- 개인정보를 제공받는 자의 개인정보의 이용목적

--- 제공하는 개인정보의 항목

--- 개인정보를 제공받는 자의 개인정보 보유 및 이용기간

--- 동의를 거부할 권리가 있다는 사실 및 동의거부에 따른 불이익이 있는 경우 그 불이익의 내용

---- 망법에 없는 내용

- 업무위탁에 따른 개인정보의 처리제한(26조) ; 순서는 뒤에있지만 끌어다 왔어

-- 업무위탁시에는 반드시 문서로 해야되고, 위탁계약서에는 개인정보보호에 대한 역할과 책임을 명시해야 함

-- 업무위탁시에는 개인정보처리방침을 공개해야 함

-- 손해배상책임에서는 수탁자를 위탁자의 소속직원으로 보기에 관리감독 철저히!

- 개인정보취급자에 대한 감독(28조)

-- 개인정보처리자는 개인정보취급자에 대하여 적절한 관리/감독을 이행해야함

--- 개인정보취급자는 임직원부터 파견근로자, 알바, 인턴까지 개인정보처리자의 지후 감독하에 개인정보를 처리하는 자 모두

--- 정기적인 교육을 실시

- 개인정보의 이용/제공 제한(18조)

-- 개인정보를 제공하더라도 최소한의 제공하고 이용목적의 범위를 벗어나서는 안됨

-- 제 3자 제공시에는 반드시 개인정보처리방침을 통해 공개

- 정보주체 이외에서 수집한 개인정보 수집 출저 등 고지(20조)

-- 개인정보 처리자가 정보주체 이외에서 수집한 경우

정보주체의 요구가 있으면 수집출저, 개인정보처리목적, 처리정지를 요구할 권라가 있음을 알려야함

- 개인정보의 파기(21조)

-- 개인정보의 처리목적을 달성하면 지체없이 파기

--- 다른 법령에 보존근거가 있으면 그거에 따라야지

-- 개인정보를 파기하지 않고 보존하는 경우는, 다른 개인정보와 분리하여 저장관리


4) 고유 식별정보 처리제한

- 민감정보처리제한(23조)

-- 사상, 신념, 노동조합, 정당의 가입탈퇴, 정치적견해, 건강, 성생활 등에 관한 정보를 처리 못하게 함

-- 망법보다 더 구체적이고 넓어졌지

- 고유식별정보처리제한(24조)

-- 개인정보처리자는 다음의 경우 제외해고 고유식별정보를 처리 불가

--- 정보주체에게 모든 사항알리고 별도로 동의를 받은경우

--- 법령에서 구체적으로 고유식별정보의 처리를 요구하거나 허용한 경우

-- 공유식별정보 : 주민등록번호 / 여권번호 / 운전자면허번호 / 외국인등록 번호 등

- 주민등록번호의 처리제한(24조의 2)

-- 다음의 경우를 제외하고 주민등록번호 처리 불가

--- 법령에서 구체적으로 주민등록번호의 처리를 요구하거나 허용한 경우

--- 정보주체나 제 3자의 급박한 생명,신체, 재산의 이익을 위해 명백히 필요하다고 인정되는 경우

--- 주민등록번호 처리가 불가피한 경우로서 행정자치부령으로 지정하는 경우

-- 개인정보처리자가 불가피하게 주민등록번호를 수집했다면, 분실/도난/유출 등을 막기 위해 암호화 조치를 통해 안전하게 보관해야됨

-- 개인정보처리자가 주민등록번호 처리 가능하더라도, 주민등록번호가 아닌 방법으로 가입할 방법 제공해야 됨

- 주민등록번호 유출시 과징금 5억(32조 2)

-- 행정자치부장관은 개인정보처리자가 처리하는 주민등록번호가 분실/도난/유출 등을 당하면 5억원 이하의 과징금을 부과/징수 가능

--- 물론 필요한 조치를 다했다면 그러지 아니하대


5) 영상정보처리기기의 설치 제한

- 영상정보처리기기의 설치/운영 제한(25조)

-- 법령에서 허용되는 경우를 제외하고는 공개된 장소에 영상정보처리기기를 설치해서는 안됨

-- 공공기관에서 설치/운영하려면 공청회 거쳐야하고, 이해관계자의 의견은 수렴하는 절차까지만 하면됨

-- 설치할때는 가장 잘 보이는 건물 중앙에 설치

-- 녹음은 해서는 안되

-- 다른용도로 사용하면 X


6) 개인정보 영향평가제도

- 개인정보처리방침의 수립 및 공개(30조)

-- 개인정보처리자는 홈페이지 첫 화면 아래에 개인정보처리방침을 공개해야함

-- 볼드체, 색상을 다르게

-- 홈페이지 없으면 사무실에 잘보이게 비치

- 개인정보 보호책임자 지정(31조)

-- 개인정보처리자는 개인정보의 처리에 관한 업무를 총괄해서 책임질 개인정보 보호책임자를 지정해야 함

-- ...하는일들 생략

- 개인정보파일 등록 및 공개(32조)

-- 공공기관의 경우, 개인정보파일에 대한 자세한사항들을 행정자치부장관에게 신고해야함

-- 행정자치부장관은 신고받은 개인정보파일에 대한 자세한 사항들을 누구나 열람가능하도록 공개해야 함

- 개인정보 영향평가(33조)

-- 공공기관은 특정한 요건을 충족할 경우 개인정보영향평가를 의무적으로 받아야 함

--- 5만명 이상의 정보주체에 대한 민감정보나 고육식별정보를 처리함

--- 다른 개인정보파일과의 연계할때, 50만명 이상의 정보주체에 관한 개인정보를 처리

--- 100만명 이상의 정보주체에 대한 개인정보파일의 처리함

-- 민간은 아직까지 권고사항

-- 공공기관은 영향평가의 결과를 행정자치부장관에게 제출해야 함

--- 행정자치부장관이 지정한 평가기관 중에서 의뢰해야 함


7) 개인정보 유출사실의 통지/신고제도

- 개인정보유출통지(34조)

-- 개인정보가 유출되었을 때에는 지체없이 정보주체에게 알려야 함


8) 정보주체의 권리보장

- 개인정보의 열람(35조)

-- 정보주체는 개인정보처리자에게 자신의 개인정보 열람을 요구할 수 있음

-- 이것도 보여줘야 되는기간이 따로 있어(대통령령)

-- 물론, 개인정보의 열람이 타인에게 해를 끼치는 등의 영향이 있을것 같으면 제한하거나 거부가능

- 손해배상 책임(39조 2항)

-- 정보주체는 개인정보처리자가 법을 윟반한 행위로 손해를 입으면 손해배상 청구가능

--- 개인정보처리자는 고의나 과실이 없음을 입증해야 해야 책임 면함

-- 물론, 개인정보처리자가 의무를 준수하고 최선을 다했다면 감경받을 수있긴해


9) 개인정보 분쟁조정위원회

- 개인정보 분쟁조정위원호의 설치 및 구성(40조)

-- 개인정보에 관한 분쟁의 조정을 위해 개인정보 분쟁조정위원회를 둠

-- 위원장 1명을 포함한, 20명 이내의 위원으로 구성(그 中 1명은 상임위원)

-- 개인정보와 관련한 분쟁의 조정을 원하는 자는 분쟁조정위원회에 분쟁조정을 신청가능

--- 분쟁조정위원회는 해당 내용을 상대방에 알려야 함

--- 공공기관이 경우 별다른 사유업승면 분쟁조정에 응해야 함

-- 분쟁조정을 신청받은 날로부터 60이내에 이를 심사해 조정안을 작성해야 함

--- 물론 의결로 처리기간 연장가능(연잔시 신청자에게 이유와 함께 알려야 함)

-- 조정전에 합의를 권고가능

- 집단조정분쟁조정(49조)

-- 정보주체의 피해 또는 권리침해가 다수의 정보주체에게 같은거나 비슷한 유형으로 발생하는 경우에 신청가능


(6) 개인정보의 안정성 확보 조치 기준(안행부고시 제2014-229호)

- 내부관리 계획수립.시행(3조)

-- 망법처럼 개인정보보호법에서도 안정성확보 조치를 위해 내부관리계획을 수립해야 함

--- 실행가능하고 / 구체적이고 / 맞춤형

-- 물론, 소상공인은 안해도되

- 접근권한 관리(4조)

-- 개인정보 수집시에는 최소화하여 수집

-- 개인정보처리시스템에 접근할 때에도 접근권한을 차등부여하고 최소한의 범위로 설정

-- 접근권한의 부여 기록은 3년간 보관

-- 개인정보 취급자의 사용 계정은 공유해서 사용해서는 안됨

- 접근통제(5조)

-- 정보통신망을 통한 불법적인 접근과 침해사고의 방지를 위해 다음과 같은 기능을 시스템에 설치/운영해야 함

--- 접속권한을 IP주소 등으로 제한하여 접근제어

--- 접속한 IP주소 등을 분석하여 불법적인 개인정보 유출시도 탐지

--- IDS / IPS / Firewall를 말하는것 같음

-- 외부망에서 개인정보처리시스템에 접근시 VPN이나 전용선등 안전한 접속수단 적용해야 함

-- 주민등록번호 이용해 본인인증 외에도 추가 인증수단을 마련해야함

-- 개인정보처리자는 연 1회이상 취약점을 점검해야 함

-- 개인정보취급자가 공개된 무선망을 통해 개인정보를 처리하는 경우, 보안프로그램이나 SSL, VPN 등을 적용해야함

-- 개인정보처리에 이용되는 모바일 기기의 분실/도난 등을 예비해 비밀번호나, 잠금 기능의 조치를 해야 함

- 개인정보의 암호화(6조)

-- 암호화 대상 : 고유식별정보, 비밀번호 및 바이오정보

--- 비밀번호및 바이오정보는 암호화하여 저장하되, 비밀번호는 일방향 암호화해서 저장(해쉬값)

-- 정보통신망을 이용해 개인정보를 송수신할 떄에도 암호화를 해야함(SSL 등 사용)

- 접속기록의 보관 및 점검(7조)

-- 개인정보처리시스템의 접근 기록은 6개월 이상 보관해야 함

-- 위/변조를 방지하기 위해 안전하게 보관

-- 반기별로 1회 이상 점검

- 악성프로그램 등 방지(8조)

-- 백신 소프트웨어 설치/운영

--- 자동 업데이트 기능 사용하거나, 일 1회 이상 엔진 업데이트 해야 됨

--- 악성 프로그램관련 경보가 떳을 때에는, 사용하는 백신의 보안 업데이트 공지가 뜨면 업데이틀 통해 최신상태 유지해야 함

- 물리적 접근 방지(9조)

-- 전산실이나 자료보관실에 개인정보를 보관시에는, 출입통제 절차를 수립/운영해야 함

-- 서류와 보조저장매체는 안전한 곳에 보관

- 개인정보의 파기(10조)

-- 완전파괴 / 전용소자장비를 이용한 삭제 / 복원안되게 포맷 또는 덮어쓰기

+ Recent posts