[Java] 클래스 / 필드 / 생성자

김도윤·2025년 1월 8일

추가 공부

목록 보기
5/8
post-thumbnail

🎈클래스(Class)

✏️객체 지향 프로그래밍(OOP,Object-Oriented Programming

  • 객체들을 만들고 이러한 객체들을 연결해서 프로그램을 완성하는 기법
  • 객체 지향 프로그래밍 특성을 지원하는 언어를 객체 지향 프로그래밍 언어라고 한다

✏️ 객체와 클래스

  • 클래스는 객체의 특성(속성, 기능)을 정의하는 설계도이다
    • 객체의 속성은 필드를 통해서 정의
    • 객체의 기능은 메소드를 통해서 정의
  • 클래스로부터 메모리에 생성된 객체를 해당 클래스의 인스턴스(Instance)라고 한다
  • 객체(Object)는 프로그램에서 구현할 대상으로 이를 구현하기 위한 설계도가 클래스(Class)이고, 클래스로부터 메모리에 생성된 실체가 인스턴스(Instance)이다.

✏️ 클래스 선언

  • 클래스 선언하는 구문

    [접근 제한자][예약어] class 클래스명 { ... }

  • 소스 파일의 이름은 반드시 선언된 클래스 이름과 같도록 해야 한다
  • 접근 제한자는 public, default 설정이 가능하다
    • public으로 선언된 클래스는 아무런 제약 없이 사용할 수 있다
    • default는 같은 패키지 내에서는 아무 제약 없이 사용가능 하나 다른 패키지는 사용 불가
  • 클래스에는 구성 멤버로 필드(Field), 메소드(Method), 생성자(Constructor)가 정의된다
    public class Member {
    	//필드, 생성자, 메소드 정의
        ...
    }

✏️ 객체 생성

  • 클래스로부터 객체를 생성하려면 new 연산자를 사용해서 생성

    클래스명 변수명 = new 클래스명();

  • new 연산자는 Heap 영역에 객체를 생성하고 객체의 주소값을 리턴
  • 객체의 주소값을 참조 타입인 변수에 저장해서 객체를 사용할 수 있다
    // new 연산자와 클래스의 생성자를 사용하여 객체 생성
    Member member = new Member();

🎈필드(Field)

✏️ 필드(Field)

  • 객체의 데이터, 상태 등의 속성이 저장되는 공간
  • 선언 형태는 변수와 비슷하나, 필드를 변수라고 부르지는 않는다
  • 필드는 생성자와 메소드 전체에서 사용되며 객체가 생성되고 소멸되기 전까지 객체와 함께 존재한다

✏️ 필드 선언

  • 필드 선언 구문

    [접근 제한자][예약어] 자료형 변수명[ = 초기값];

  • 접근 제한자는 public, private, default, protected 설정 가능
  • 예약어는 final, static 설정 가능
  • 초기값은 필드 선언 시 주어질 수 있고 생략 가능하다
  • 초기값이 지정되지 않은 필드는 객체 생성 시 자동으로 기본 초기값으로 설정
    public class Member {
      // 필드 정의
      public String name; // null
      private int age = 20;
    
      // 생성자, 메소드 정의
      ...
    }

✏️필드 사용

  • 클래스 내부에서 생성자와 모든 메소드에서 사용 가능
  • 클래스 외부에서 필드를 사용하려면 클래스로부터 객체를 생성 후 필드를 사용해야 한다
  • 접근 제한자가 public인 필드의 경우 . 연산자를 사용해서 접근할 수 있다
    Member member = new Member();
    
    // 도트(.) 연산자를 사용해서 필드에 접근
    member.name; // 접근 가능
    member.age; // 에러 발생

🎈접근 제한자

✏️ 접근 제한자

  • 자바에서 제공하는 접근 제한자는 public, protected, default, private 4가지 종류 제공
  • public : 외부에서 자유롭게 접근 가능
  • protected : 같은 패키지 또는 자식 클래스에서만 접근 가능
  • default : 같은 패키지에서 소속된 클래스에서만 접근 가능
  • private : 외부엣 접근 제한, 선언된 클래스에서만 접근 가능
  • public > protected > default > private 순으로 접근이 강화



    ex)

    public class User {
        //필드 선언
        public String id = "hong";
    
        protected String address;
    
        String name = "홍길동";
    
        private String password;
    
        // 메소드 선언
        public void test(int number) {
            // 지역변수에는 접근 제한자를 붙이지 않는다
            int num = 20;
            //지역 변수는 반드시 사용하기 전에 초기화해야 한다.
            System.out.println(num);
           
            //매개변수는 메소드 호출 시 반드시 값이 전달되어 오기 때문에 ㅜㄹ력이 가능하다
            System.out.println(number);
           
            // 필드는 클래스 전역에서 사용이 가능하다(생성자, 메소드)
            // 미 초기화 시 JVM이 기본값으로 초기화한다
            System.out.println(password);
           
            password = "123456789";
    
            System.out.println(password);
        }
    }

🎈 생성자

✏️ 생성자(Constructor)

  • 생성자는 new 연산자로 호출되는 특별한 메소드로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당
  • 모든 클래스는 생성자가 반드시 존재해야 하고 생성자를 하나 이상을 가질 수 있다

✏️ 생성자 선언 + example

  • 생성자를 선언하는 구문은 [접근 제한자] 클래스명([매개변수]) { ... }
  • 생성자의 선언은 메서드와 다르게 반환값이 없고 생성자명은 클래스명과 똑같이 지정
  • 클래스에 생성자 선언을 생략하면 컴파일러가 내용이 비어있는 기본 생성자(Default Constructor)를 자동으로 추가
  • 단, 클래스에서 생성자를 한 개라도 명시적으로 선언했다면 컴파일러는 기본 생성자를 추가하지 않는다
  • p.s) 인텔리제이에서 Alt + Insert 단축키로 생성자(Constructor, Setter 등) 일일이 코드 입력하지 않고 생성 가능
    public class User {
        // 필드 선언
        private String id;
        private String password;
        private String name;
        private int age;
        private char gender;
    
        // 생성자 선언
        // 기본 생성자
        // 객체 생성만을 목적으로 사용
        public User() {
        }
    
        // 생성자를 private으로 선언하면 외부에서 절대로 객체를 생성할 수 없다
        // 클래스 내부에서만 생성자를 호출해서 객체를 생성할 수 있다
        //private User() {
        //}
    
        // 매개변수가 있는 생성자 (아이디, 패스워드, 이름)
        // 객체 생성과 동시에 전달된 값들을 매개변수로 받아서 필드를 초기화하는 목적으로 사용
        public User(String id, String password, String name) {
            this.id = id;
            this.password = password;
            this.name = name;
            //나머지 필드(age, gender)은 JVM이 초기값을 설정해준다
        }
    
        // 매개변수가 있는 생성자(아이디 ,패스워드, 이름, 나이, 성별)
        public User(String id, String password, String name, int age, char gender) {
            // 클래스 내에서 문자열 매개변수 3개를 가지는 생성자를 호출한다)
            this(id,password,name);
            this.age = age;
            this.gender = gender;
        }
    
        // 메소드 선언
        public String information() {
            // 메소드 내부에서는 this()를 사용해서 생성자를 호출할 수 없다
            // this(id,password,name);
            return String.format("%s, %s, %s, %d, %c\n", this.id, this.password, this.name, this.age, this.gender);
        }
    }
    ```java

✏️ this

  • 객체 내부에서 객체는 자신을 this라고 표현
  • 객체 내부에서 다른 멤버에 접근하기 위해 this 사용
  • this는 주로 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우에 매개변수와 필드를 구분하기 위해 사용

✏️ 다른 생성자 호출

  • 생성자에서 다른 생성자를 호출할 때 this()를 사용
  • this()를 통해서 생성자 간에 중복되는 코드를 제거할 수 있다
  • ⚠️ 생성자의 첫 줄에서만 사용 가능하고 메소드 안에서는 사용 불가능

업로드중..

profile
나태해 지지 말고 꾸준히

0개의 댓글