[JAVA] 객체지향 - 역사, 인스턴스, 클래스

2024. 8. 31. 01:15·Back-End/Java

[작성일: 2023. 01. 25]

 

객체지향언어

역사

  • 과학, 군사적 모의실험을 위해 컴퓨터를 이용한 가상세계를 구현하려는 노력으로부터 객체지향이론이 시작됨.
  • 1960년대 최초의 객체지향언어 Simula 탄생
  • 1980년대 절차방식의 프로그래밍의 한계를 객체지향방식으로 극복하려고 노력함. (C++, Smalltalk와 같은 보다 발전된 객체지향언어 탄생)
  • 1995년 말 Java 탄생. 객체지향언어가 프로그래밍 언어의 주류가 됨.

 

 

 

정의

  • 클래스(Class)
    • 설계도
    • 객체를 정의한 것. 객체를 생성하는 데 사용됨.

 

  • 객체
    • 설계도로 만든 제품
    • 실제로 존재하는 것
    • 객체의 속성과 기능에 따라 용도가 다름.

 

클래스 객체
제품 설계도 제품
TV 설계도 TV

 

  • 클래스는 객체로 구현될 때 의미가 있음(=제품으로 만들어지지 않는 설계도는 의미가 없음.) ➡️ Apple과 An Apple
  • 객체지향의 목적은 코드 개발 노력을 최소화하는 것
  • 객체지향 프로그래밍은 클래스를 디자인하는 것

 

 

 

특징

  • 기존의 프로그래밍 언어에 몇 가지 규칙을 추가한 것일 뿐 크게 다르지 않음.
  • 새로운 코드를 작성할 때 기존의 코드를 이용하기 때문에 쉽게 작성할 수 있고 코드의 재사용성이 높음.
  • 코드 간의 관계를 맺어줌으로써 적은 노력으로 코드 변경이 가능하며 코드의 관리가 쉬움.
  • 신뢰성이 높은 프로그램의 개발 가능. 제어자와 메서드를 이용해서 데이터를 보호하고 코드의 중복을 제거하여 코드의 불일치로 인한 오류 방지

 

 

 

종류

  • 상속(Inheritance)
    • 하위 클래스가 상위 클래스를 물려받는 것
  • 다형성(Polymorphism)
    • 같은 이름으로 호출했을 때 호출한 인자에 따라 다르게 설계하는 것
  • 추상화(Abstraction)
    • 사물(객체)의 속성이나 특성을 추출하는 것
  • 캡슐화(Encapsulation)
    • 내부를 공개하지 않는 것
    • 불필요하게 복잡한 것을 피하고 위험에서 보호함.

 

 

 

 

 

객체와 인스턴스

  • 객체 = 인스턴스
  • 객체(Object)는 인스턴스(instance)를 포함하는 일반적인 의미
  • 특정 클래스로부터 생성된 객체(ex: tv인스턴스)

 

책상은 인스턴스다. 책상은 책상 클래스의 객체이다.
책상은 객체다. 책상은 책상 클래스의 인스턴스이다.

 

 

 

인스턴스화

  • 클래스로부터 인스턴스를 생성하는 것
    • 클래스(설계도) ➡️ 인스턴스(객체/제품)

 

 

 

객체의 속성과 기능

  • 객체는 속성과 기능의 집합 - 멤버
  • 속성은 변수, 기능은 메서드로 정의
class TV { // tv 설계도
  String color; // 색
  boolean power; // 전원상태(on/off)
  int channel; // 채널 
    
  void power() { power = !power; } // 전원 on/off
  void channelUp { channel++; } // 채널 올리기
  void channelDown { channel--; } // 채널 내리기

 

 

 

인스턴스 생성방법

  • 클래스명 참조변수명; // 객체를 다루기 위한 참조변수 선언
  • 참조변수명 = new 클래스명(); // 객체생성 후 생성된 객체의 주소를 참조변수에 저장
Tv t;
t = new TV();
t.channel = 5;
t.channelDown();
    
  System.out.println(t.channel);
 
class TV {
  String color; // 색
  boolean power; // 전원상태(on/off)
  int channel; // 채널
    
  void power() { power = !power; } // 전원 on/off
  void channelUp { channel++; } // 채널 올리기
  void channelDown { channel--; } // 채널 내리기
}

 

 

 

 

 

클래스(Class)

  • 클래스 == 데이터 + 함수
  • 데이터와 함수의 결합
    • 변수: 하나의 데이터를 저장할 수 있는 공간
    • 배열: 같은 타입의 여러 데이터를 저장할 수 있는 공간
    • 구조체: 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간
    • 클래스
      • 데이터와 함수의 결합(구조체 + 함수)
      • 여러 형태의 값뿐 아니라 여러 형태의 함수를 저장함.

 

 

 

클래스의 구조

필드(Field) - 클래스가 가지고 있는 변수
- 클래스의 함수 내에서 선언된 변수는 아님.
- 멤버 변수
메서드(Method) - 클래스 내에 있는 함수
- 멤버 함수
생성자( Constructor) - 클래스(설계도)가 객체(제품)로 만들어질 때 실행되는 함수
- 객체로 생성될 때 반드시 해야할 작업들을 넣음.
- 함수명이 클래스명과 동일해야 하며 리턴값이 없음.

 

 

 

사용자 정의 타입(User-defined type)

  • 프로그래머가 직접 새로운 타입을 정의할 수 있음.
  • 서로 관련된 값을 묶어서 하나의 타입으로 정의함. 
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];

// ↓ 아래의 코드가 더 객체지향적인 코드임.

Time[] t = new Time[3];
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();
                                    
class Time { // Time 클래스 정의, 사용자 정의 타입
  int hour;
  int minute;
  int second;  
}
   
Time t = new Time();  // 객체 생성
  t.hour = 12;  
  t.minute = 34;
  t.second = 56; // 객체지향적인 코드
    
Time t1 = new Time();
Time t2 = new Time();
Time t3 = new Time();
    
Time[] t = new Time[3];
t[0] = new Time();
t[1] = new Time();
t[2] = new Time();

 

 

 

 

 

Q&A

Q. 클래스가 왜 필요한가?
    A. 객체(제품)를 생성하기 위해


Q. 객체(TV)가 왜 필요한가?
    A. 객체(제품, TV)를 사용하기 위해


Q. 객체를 사용한다는 것은?
    A. 객체(TV)가 가진 속성(변수)과 기능(메서드)을 사용하려고

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/Java' 카테고리의 다른 글
  • [JAVA] 객체지향 - this
  • [JAVA] 객체지향 - 메서드
  • [JAVA] 객체지향 - 변수
  • [JAVA] 배열
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    sql
    Java
    자바스크립트
    spring
    의존성주입
    Security
    생성자
    html
    최주호
    Spring Security
    Swift
    javascript
    데이터베이스
    스프링
    다형성
    백준
    DB
    변수
    MVC
    게시판만들기
    성능최적화
    JPA
    자바
    객체
    알고리즘
    Database
    프로그래머스
    김영한
    jsp
    HTTP
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JAVA] 객체지향 - 역사, 인스턴스, 클래스
상단으로

티스토리툴바