[Java] 클래스(1) - 객체와 클래스의 개념

sobam·2022년 10월 31일
0

자바

목록 보기
15/18
post-thumbnail

📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.

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


객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임 중 하나이다.

프로그래밍에서 필요한 데이터를 추상화시켜 상태(속성, 어트리뷰트)와 행위(메서드)를 가진 객체로 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 방법을 의미한다.

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

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

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



객체 지향 프로그래밍의 특징


1. 추상화(Abstraction)

객체에서 공통된 속성과 행위를 추출해 공통의 속성과 행위를 찾아서 타입을 정의하는 과정이다.

  • 객체 지향 프로그래밍의 특징 중 하나인 '추상화'는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다.
    즉, 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.

  • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만든다.

2. 캡슐화(Encapsulation)

객체의 필드와 메서드를 묶고, 실제 구현 내용은 감추는 것이다.
(객체 지향 프로그래밍에서 기능과 특성의 모음을 "클래스라는 "캡슐"에 분류해서 넣는것)

  • 외부 객체는 객체 내부의 구조를 알 수 없으며, 객체가 노출해서(ex. public) 제공하는 필드와 메소드만 이용할 수 있다.

  • 필드와 메소드를 캡슐화 하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위함이다.

캡슐화의 목적 2가지

1) 코드를 재수정 없이 재활용하는 것
2) 접근 제어자를 통한 정보 은닉

자바 언어는 캡슐화된 멤버를 노출 시킬 것인지 숨길 것인지 결정하기 위해 접근 제한자(Access Modifier)를 사용한다.

3. 상속(inheritance)

클래스의 상속은 부모 클래스의 멤버(필드, 메서드, 내부 클래스)를 내려받아 자식 클래스 내부에 포함시키는 것이다. 자식 클래스에서는 부모 클래스의 속성과 기능을 이어받아 사용할 수 있다.

  • 상위(부모) 객체의 필드와 메서드를 하위(자식) 객체에게 물려준다.
  • 부모 객체의 필드와 메서드를 상속받은 자식의 객체에서 그대로 사용할 수 있다.
  • 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있다.
  • 하위 객체는 상위 객체를 확장해서 추가적인 필드와 메서드를 가질 수 있다.
  • 일반적으로 상위 객체는 종류, 하위 객체는 구체적인 사물에 해당한다.
  • 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정한다.

    부모(parent class, super class / 상위 클래스)
    : 해당 클래스에 선언된 변수와 함수를 물려주는 클래스

    자식(child class, sub class / 하위 클래스)
    : 다른 클래스로부터 물려받고자 하는 클래스

상속의 효과

1) 반복된 코드의 중복을 줄임
2) 유지 보수의 편리성 제공
3) 클래스의 다형적 표현 가능

다중상속은 불가능하다. (클래스의 상속 관계에 혼란을 줄 수 있기 때문)

4. 다형성(polymorphism)

같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다.
(즉, 오버라이딩(Overriding), 오버로딩(Overloading)이 가능하다.)

  • 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다.
  • 부모 타입에는 모든 자식 객체가 대입
  • 인터페이스 타입에는 모든 구현 객체가 대입
  • 효과 : 객체를 부품화시키는 것이 가능, 유지 보수가 용이

    오버라이딩(Overriding)
    : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것

    오버로딩(Overloading)
    : 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것



객체 지향 프로그래밍의 장단점


장점

  1. 코드 재사용 용이
    : 남이 만든 클래스를 가져와서 재사용하거나 상속을 통해 확장해서 사용할 수 있다.
  2. 유지 보수 쉬움
    : 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면, 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다. 
  3. 대형 프로젝트에 적합
    : 클래스 단위로 모듈화시켜서 개발할 수 있으므로 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합하다.

단점

  1. 처리속도가 상대적으로 느림
  2. 객체가 많으면 용량이 커질 수 있음
  3. 설계시 많은 시간과 노력이 필요



객체와 클래스


1. 객체(Object)

객체란 클래스에 선언된 모양 그대로 생성된 실체를이며, '클래스의 인스턴스'라고 부른다.

  • 사용할 수 있는 실체를 의미
  • 객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 다름
  • 클래스에 정의된 내용대로 메모리에 생성된 것

    인스턴스(instance, 객체)
    : 클래스를 통해서 구현해야할 대상(객체)이 실제로 구현된 구체적인 실체를 말한다.

2. 클래스(Class)

클래스란 객체를 정의하고 만들어 내기 위한 설계도 혹은 틀이다. 클래스 안에는 객체를 만들어내기 위해 필요한 변수와 메서드들이 존재한다.

인스턴스 멤버
: 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메서드이다. 이들을 각각 인스턴스 필드, 인스턴스 메서드라고 부른다.

정적 멤버
: 클래스에 고정된 멤버로서, 객체를 생성하지 않고 사용할 수 있는 필드와 메서드이다. 이들을 각각 정적 필드, 정적 메서드라고 부른다. 정적 멤버는 객체가 아닌 클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 한다.



🔔 Reference

<Do it! 자바 완전 정복>
https://rap0d.github.io/study/2019/08/24/java_12_javaclass/
https://nathanh.tistory.com/120
http://www.tcpschool.com/java/java_class_intro
https://hoonmaro.tistory.com/42
https://hongong.hanbit.co.kr/%EC%9E%90%EB%B0%94java-%EC%9A%A9%EC%96%B4-%EC%A0%95%EB%A6%AC-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%83%81%EC%86%8D/
https://jeong-pro.tistory.com/95
https://code-lab1.tistory.com/246
https://javakid.tistory.com/8

0개의 댓글

관련 채용 정보