본문 바로가기
Programming/JAVA

이론_9. 클래스

by yoon9i 2024. 3. 6.
/*
    <클래스>

    ◎ 클래스(Class)는 서로 관련있는 멤버(Member)를 포함하기 위한 존재이다.
    ◎ 클래스의 명명은 파스칼 케이스를 이용하고, 단수형 명사를 이용한다.

        [접근 제한자] [abstract|final]? class [클래스 이름] [extends [부모 클래스 이름]]? [implements [인터페이스 이름,...]]? {

        }

        public class FIFTH {

        }

        -위 클래스의 접근 제한자는 public 이고, 추상적이지 않으며 이름은 FIFTH 이다.
         별도로 상속(inheritance) 및 구현(implementation) 이 언급되어 있지 않다.
        - abstract : 추상 여부.
        - final : 최종 여부
        - 클래스는 추상적이면서 최종적이거나 최종적이면서 추상적일 수 없다.
          (abstract,final 중 하나만 쓰라는 뜻, 아님 아예 안쓰거나.)
        - 추상클래스
            → abstract 키워드를 이용하여 어떠한 클래스를 추상적으로 만들 수 있다.
            → 추상적인 클래스는 일반적인 방식으로 직접 객체화할 수 없다.
            → 추상 메서드가 없다 하더라도 클래슨는 추상적일 수 있다.

    ◎ 접근 제한자가 public 인 클래스는 그 클래스 코드를 포함하는 파일의 실제 이름과 동일해야 한다.
    ◎ 클래스가 내부에 포함하고 있을 수 있는 대상은 많지만 '멤버 변수(Member Variable) 와 메서드(Method)' 가 주류를 이룬다.



    <객체화(Instantiation>

    ◎ 어떠한 타입(주로 클래스)에 대한 독립적인 객체(값)를 생성하기 위해 사용한다.
    ◎ 클래스 객체화 시 클래스가 멤버로 가지고 있는 비정적인(정적이지 않은) 모든 것이 새롭게 생기게(초기화 혹은 객체화) 된다.

        [타입] [변수이름] = new [타입] [생성자 호출부];

        T t = new T(); //T : 타입



    <생성자(Constructor)>

    ◎ 생성자(Constructor)는 어떠한 클래스를 객체화할 때 반드시 한 번 실행이 되는 일종의 메서드이다.
      단, 생성자는 임의로 호출할 수는 없다.
    ◎ 어떠한 클래스 내에 그 어떤 생성자도 명시하지 않은 경우 기본생성자가 있는 것으로 간주한다.
      기본 생성자는 매개변수가 없고, 호출 부의 구문은 부모 생성자 호출 하나로 이루어져있다.

        public [클래스 이름](){
            super();
        }

    ◎ 생성자는 정적일 수 없고,생성자는 반환 타입이 없으며(선택 사항이 아님으로 void 로 명시하지도 않는다.)
      구현부의 첫 구문은 반드시 부모 혹은 본인 생성자 호출이어야만 한다.



    <캡슐화(Encapsulation)>

    ◎ 캡슐화(Encapsulation)는 어떤 클래스가 가지는 멤버 변수의 접근 제한자를(상수가 아닌한) private 으로 막고,
      이에 접근하기 위한 Getter 및 Setter 메서드를 만드는 것을 의미한다.
    ◎ 멤버 변수에 직접 값을 대입할때에는 특정 로직을 실행시킬 수 없으나, Setter 메서드를 통해 값 대입을 대리하게
      하면 특정 로직을 실행 시킬 수 있음으로 올바르지 않은 값의 대입을 막을 수 있다.
    ◎ 즉, 개발자간의 협동의 용이 및 실수의 방지를 위해 대부분의 필드를 가지는
      클래스(Entity,DTO,VO 등)는 캡술화가 되어 있다.
    ◎ 읽기전용(상수,final)의 경우 캡슐화를 하기도 하지만 안 해도 상관 없다.(어차피 값 대입이 안되니)
      단, 값이 참조될때 마다 특정 로직을 작성해야 한다면 읽기 전용이라 하더라도 Getter 메서드를 만드는 경우가 있다.
    ◎ 정적인 읽지전용(static final)의 경우 캡슐화를 하지 않는다.(하면 안된다.)


    <상속(Inheritance)>

    ◎ 기존에 존재하는 최종적이지 않은(final 이 아닌) 클래스의 기능을 그대로 가지고 추가적인 기능을 구현하기
      위해 클래스를 상속받을수 있다.
    ◎ 상속 받을 수 있는 클래스의 개수는 한 개로 제한된다.
    ◎ 클래스 간의 상속 구조가 순환 상속 구조(Circular Inheritance)가 되어서는 안된다.

        public class Child extends Parent{
            //...
        }

        위 구조에서 클래스 Child 는 클래스 Parent 를 상속 받는다고 한다.

    ◎ 별도의 상속 대상을 명시하지 않는다면 Object 클래스를 상속받게 된다.


*/

'Programming > JAVA' 카테고리의 다른 글

이론_11. String Format  (0) 2024.03.06
이론_10. String 클래스  (0) 2024.03.06
이론_8. 메서드  (0) 2024.03.06
이론_7. WHILE  (0) 2024.03.06
이론_6. SWITCH  (0) 2024.03.06