[JAVA] 객체지향과 클래스

KingU·2022년 4월 22일
0

JAVA

목록 보기
2/2
post-thumbnail

객체지향의 개념

프로그램을 객체들의 집합으로 보며 이러한 객체들이 프로그램의 중심

객체 = 속성 + 메소드




객체와 클래스

객체: 의미를 부여하고 분류하는 논리적인 단위

객체는 속성과 메소드로 구성되는데

속성: 객체의 정적인 특성을 표현
메소드: 객체의 동적인 특성인 행위를 표현

클래스: 여러 개의 객체를 생성하는 형판

  1. 실세계 객체 모델링
  2. 클래스 정의
  3. 객체 생성 및 사용



객체지향 언어의 특징

  1. 캡슐화

    외내부의 속성과 메소드를 지정 - 접근 제어자를 사용하여
    => 캡슐화와 정보 은닉이 가능

  2. 상속

    기존 클래스에서 모든 속성과 메소드를 상속받고 더 필요한 속성과 메소드를 추가하여 새로운 클래스를 만드는 것


  1. 다형성
    객체의 메소드 형태가 다양한 것
    오버로딩: 동일한 이름의 메소드가 매개 변수의 개수나 타입을 달리하여 여러 가지 형태로 존재
    오버라이딩: 상속 관계에 있는 하위 클래스가 상위 클래스의 메소드를 재정의하는 것

  1. 메세지
    객체 간에 서로 통신하는 방법



클래스


클래스

  • 클래스 선언부

  • 클래스 멤버

    • 생성자
    • 멤버 변수
    • 메소드
    • 내부 클래스

형식

class 클래스 이름 // 클래스 선언부
{
	// 클래스 멤버

}


객체 생성

1단계: 객체참조형 변수 선언
클래스형의 객체가 저장되는 기억 장소의 주소를 가리키는 객체참조형 변수를 선언

2단계: 객체 생성
new 연산자를 이용하여 객체를 저장할 기억 공간을 확보

ex)

Student kim = new Student();

객체의 속성이나 메소드에 접근하려면 .(dot) 연산자를 이용하여 접근

ex)

kim.name = "kim"
kim.grade = 2;


멤버 변수

[접근제어자] 데이터형 변수명;
  • 접근 권한: public, protected, private
  • 활용 방법: static, final
  1. 접근 권한
    클래스 내의 멤버 변수에 대한 접근 권한을 제어하기 위해 사용
    => 캡슐화와 정보 은닉 구현 가능
  1. 클래스 변수(static)
    하나의 클래스로부터 생성된 객체들 사이의 공통된 속성을 표현
  1. 상수(final)
    멤버 변수에 final이 붙으면 더 이상 값을 변경할 수 없음



생성자


생성자의 정의

클래스로부터 객체를 생성할 때 객체의 초기화 과정을 기술하는 특수한 메소드

특징

1. new 연산자와 함께 사용되며 객체 생성 시에 호출
2. 객체 생성 시에 객체의 멤버 변수(객체 변수)를 초기화하는 일을 주로 함
3. 생성자의 이름은 클래스 이름과 동일, 일반적으로 첫 문자는 대문자
4. return 이 없음
5. 생성자가 없는 클래스는 자바 가상 머신(JVM)이 자동으로 삽입하는 자동 생성자를 가짐
6. 사용자가 정의한 생성자가 있을 경우에는 기본 생성자는 자동으로 없어짐

형식

[접근 제어자] 생성자 이름(매개 변수1, 매개 변수2){
// 객체 초기화에 필요한 코드
}

생성자와 객체

생성자는 객체 생성 시 반드시 호출되어야 하는 메소드


생성자 오버로딩

클래스는 매개 변수의 개수, 타입, 순서를 달리하는 같은 이름의 생성자를 여러 개 정의할 수 있으며 이를 생성자 오버로딩(overloading)이라고 함

다양한 형태의 생성자를 통해 다양한 형태의 객체를 생성함으로 다형성 구현

this

클래스에 사용되는 this는 현재 생성되어 사용 중인 객체 자신의 의미

  • this
    객체 자신을 의미
    this.속성, this.메소드 형태로 사용

오버로딩에서 생성자 안에서 다른 생성자를 호출하는 경우

public Student(String name) {
	this.name = name;
}

public Student(String name, int grade) {
	//this.name = name;
    this(name);
    this.grade = grade;
}



메소드와 오버로딩


메소드 선언

메소드는 클래스가 가지는 동적인 특성인 행위를 정의

형식

[접근 제어자] 리턴타입 메소드이름(매개 변수1, 매개 변수2 ...)
{
// 메소드 내용
}

메소드 구현

동적인 특성이 필요하다면 메소드로 구현하면 됨

멤버 변수 접근 권한을 private로 하고 public으로 지정한 메소드를 통해 멤버 변수에 접근하도록 하는 것이 바람직하다.
=> 객체지향 언어의 특징인 캡슐화 구현


클래스 메소드(static)

클래스 메소드도 클래스 로딩할 때 생성되며 객체 변수가 아닌 클래스 변수만 사용


메소드 오버로딩

같은 클래스 안에 매개 변수의 개수, 타입, 순서를 달리하는 동일한 이름의 메소드가 여러 개 존재




상속


상속의 개요

상속(inheritance)는 기존에 있는 클래스의 멤버 변수나 메소드를 물려받아 새로운 클래스를 만드는 것


상속 방법

상속은 extends 키워드를 사용하고 단일 상속만을 지원

형식

[접근 제어자] class 클래스 이름 extends 상위 클래스 명{
	// 멤버 변수나 메소드 정의
}

상속과 접근 제어자

상속 관계에서 상위 클래스의 접근 제어자가 protected일 경우 하위 클래스에서 접근할 수 있지만 여전히 private일 경우 상속 관계에서도 접근이 불가능하다.




상속과 생성자


상속 과정에서 생성자는 상속되지 않고, 하위 클래스의 객체 생성 시 자동으로 상위 클래스의 인자 없는 생성자가 호출된다.
=> 상위 클래스의 인자 없는 생성자가 없으면 오류

super 키워드와 super() 메소드

상속 관계에 있는 클래스에서 상위 클래스의 멤버 변수나 생성자를 호출하기 위해서는 super 키워드와 super() 메소드 사용

형식

super.상위 클래스의 멤버 변수
super.상위 클래스의 메소드 이름()





당신의 시간이 헛되지 않는 글이 되겠습니다.
I'll write something that won't waste your time.

profile
원하는 것을 창조하고 창조한 것을 의미있게 사용하자

0개의 댓글

관련 채용 정보