java week5, 클래스


목차



클래스 정의하는 방법


모든 자바 프로그램은 오브젝트를 사용하고 이런 오브젝트의 타입은 interface나 class로 정의됩니다.

자바는 객체 지향 프로그래밍이며 객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됩니다.

객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다.

이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍입니다.

이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다.

클래스란?

  • 새로운 개체를 만들 때 명세
  • 개체는 클래스로부터 만들어져야함
  • 필드(멤버 변수) : 객체지향에서 속성에 해당하며 멤버 변수라고도 한다.
  • 메소드 : 객체지향에서 기능(행위)에 해당하며, 클래스를 사용하여 메소드내에서 정의된 행위를 샐행하는 역할을 한다
  • 생성자 : 변수에 초기값을 대입하여 사용하듯 클래스에도 동일한 형식으로 생성해 초기화를 해주는 역할을 한다.

Dog.java(상태와 동작을 가진 Dog 클래스)

public calss Dog{
    private String name;
    private Long age;

    public void bark(){
        System.out.println("개는 짖는다.");
    }
}

필드 : 객체의 상태(속성) name, age 메소드 : 객체의 행동 bark


인스턴스(객체)


자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 합니다.

이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화라고 합니다.

또한, 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 합니다.

즉, 인스턴스란 메모리에 할당된 객체를 의미합니다.

자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.

이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.

하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다. 그림

메소드는 스태틱 영역에서 불러오며, 필드는 힙영역의 개인별 인스터스에서 불러온다.


자바 접근 지정자


자바에서는 클래스를 정의하기 class 키워드를 사용하며, 외부 클래스가 해당 클래스에 접근하는 범위를 접근 지정자를 통해 제한할 수 있다.

접근 지정자는 public, protected, default, private 네 가지가 있다.

접근지정자클래스 내부동일 패키지하위 클래스그 외 영역
publicoooo
protectedooox
default(기본, 생략가능)ooxx
privateoxxx

객체 만드는 방법 (new 키워드 이해하기)


객체는 new 키워드를 이용해 생성이 가능하다. new 키워드를 이용하면 메모리 힙 영역에 데이터를 저장할 영역을 할당 받은 후 해당 영역의 주소를 객체에게 반환하여 객체를 사용할수 있도록 만들어준다.

//클래스이름 변수명 = new(키워드) 클래스이름(생성자 호출)

Person person = new Person();  // 기본 생성자
Person person1 = new Person("로베르토 레반도프스키",32); 
person1.getName();  //로베르토 레반도프스키

Map<String, Integer> map = new HashMap<>();

메소드 정의하는 방법


클래스 내부의 메소드는 접근지정자, 리턴타입, 메소드명, 파라미터(선택)로 구성된 정의부메소드의 기능을 호출하는 호출부로 구성된다.

//접근지정자 리턴타입 메소드명(파라미터)
public String getName() {... 호출부 ...}
public void setName(String name) {..}

메소드를 정의할 때 중요한 기법이 있는데 바로 메소드 오버로딩과 메소드 오버라이딩이다.

자바의 객체지향의 특징인 다형성을 이용한 방법으로 코드의 변경과 확장을 용이하게 해주는 자바의 대표적인 특징이다.


메소드 오버로딩(method Overloading)


파라미터의 갯수나 타입의 다르다면 동일한 이름의 메소드명을 사용해 메소드를 정의할 수 있는 기법이다.

매개변수는 동일하고 리턴타이이 다른경우에는 메소드 오버로딩이 성립되지 않는다.

System.out.println()이 대표적인 메소드 오버로딩 기법 중 하나이다.

//메소드 오버로딩
public String getName() {...}
public String getName(int age) {...}

//대표적인 메소드 오버로딩
System.out.println("바이에른 뮌헨");
System.out.println("1900);

하나의 이름으로 다양한 파라미터를 넣어서 다양한 기능을 사용할 수 있다.


메소드 오버라이딩


메소드 오버라이딩은 상위 클래스가 정의한 메소드를 하위 클래스가 가져와 변경하거나 확장하는 기법, 즉 하위 클래스에서 메소드를 재정의하는 기법이다.

class Person {
	public void info() {
		System.out.println("사람입니다");
	}
}

class Adult extends Person {
	@Override
	public void info() {
		System.out.println("어른입니다.");
	}
}

class Child extends Person {
	@Override
	public void info() {
		System.out.println("어린이입니다.");
	}
}

Person person = new Person();
Adult adult = new Adult();
Child child = new Child();
Person person_child = new Child( );

person.info();     //사람입니다.
adult.info();      //어른입니다.
child.info();      //어린이입니다.
person_child.infO();    //어린이입니다.

메소드 오버라이딩은 상위 클래스의 메소드를 하위 클래스에서 메소드를 재정의하기 때문에 확장과 변경에 용이하다는 장점이 있다. 또한 오버라이딩 된 메소드는 인스턴스 타입에 맞게 결정된다.




© 2019.04. by salmon2

Powered by theorydb