Post

클래스

클래스

클래스는 객체지향 프로그래밍에서 객체를 정의해주는 틀이라고 생각하면 된다. 즉, 객체의 속성과 기능을 하나로 묶어놓은 틀이다.

자바에서 클래스는 필드, 생성자, 메소드로 구성된다.

  • 필드(멤버 변수) : 객체지향에서 속성에 해당하며 멤버 변수라고도 한다.
  • 생성자 : 변수에 초기값을 대입하여 사용하듯 클래스에도 동일한 형식으로 생성해 초기화를 해주는 역할을 한다.
  • 메소드 : 객체지향에서 기능(행위)에 해당하며, 클래스를 사용하여 메소드내에 정의된 행위를 실행하는 역할을 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//접근지정자 class(키워드) 클래스이름 { }
public class Person {
	//필드, 멤버변수
	private String name;
	private String age;
	
	//default 생성자, 생략이 가능하지만 파라미터를 가진 생성자가 있을시 반드시 명시해야한다.
	public Person(){
		
	} 
	//파라미터를 가진 생성자, 파라미터를 가지고 변수를 초기화한다.
	public Person(String name, String age){
		this.name = name;
		this.age = age;
	}
	
	//메소드, 이름을 가져오는 행위를 한다.
	public String getName(){
		//메소드 내부 기능
		return name;
	}
}

Inner Class와 Nested Class

Nested Class란 클래스 안에 클래스를 의미한다.

Nested Class는 크게 non-static class(= inner class)static class(= static nested class)로 나뉜다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class OuterClass {

    String outerField = "Outer field";
    static String staticOuterField = "Static outer field";
    ...
    class InnerClass {
        System.out.println(outerField);
         System.out.println(staticOuterField);
        ...
    }

    static class StaticNestedClass {
        // 컴파일 에러 : static 필드가 아닌 필드는 참조할 수 없다.
        //     field outerField
        // System.out.println(outerField);
        System.out.println(outer.outerField);
        System.out.println(staticOuterField);
        ...
    }
}
  • Inner Class
    • inner class는 해당 클래스의 인스턴스와 연결되며 해당 개체의 메서드 및 필드에 직접 접근할 수 있다.
    • inner class를 인스턴스화 하려면 먼저 외부 클래스를 인스턴스화 한후 외부 객체 내에 내부 객체를 생성할 수 있다.
      1
      2
      
      OuterClass outerObject = 새로운 OuterClass(); 
      OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 
      
    • inner class는 다시 local inner class(내부 클래스)anonymous inner class(익명 클래스) 로 나뉜다.
  • static class (= static nested class)
    • static class는
    • static 클래스 메서드와 마찬가지로 자신을 둘러싸는 클래스에 정의된 인스턴스 변수나 메서드를 직접 참조할 수 없다.
    • 객체 참조를 통해서만 접근이 가능하다.
This post is licensed under CC BY 4.0 by the author.