[Java]자바 프로그래밍(클래스와 객체)

2024. 1. 3. 01:36· 공부/Java
목차
  1. Real World(실제 세계)는 객체로 이루어진다.
  2. 객체 지향
  3. 절차 지향과 객체 지향의 차이
  4. 객체 지향 방법
  5. 객체 지향의 3대 특징
  6. 캡슐화
  7. 캡슐화의 정보 은닉
  8. 상속
  9. 다형성
  10. 객체 지향의 장점
  11. 쉬운 디버깅
  12. 자바에서의 객체
  13. 메시지
반응형

클래스와 객체

  • 객체
  • 메시지
  • 클래스
  • 객체 지향
  • String 클래스

객체 지향 개념을 완벽하게 이해하여야지 객체 지향 설계의 이점을 활용할 수 있다

Real World(실제 세계)는 객체로 이루어진다.

객체는 우리가 보고 느끼고 인지할 수 있는 그 모든 것을 의미한다고 보면된다.

객체는 자신만의 고유한 특성과 행동을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하면서 존재한다.

객체 지향

실제 세계를 모델링하여 소프트웨어를 개발하는 방법

Untitled.png

절차 지향과 객체 지향의 차이

  • 절차 지향 프로그래밍(procedural Programming)
    • 문제를 해결하는 절차를 중요하게 생각하는 방법

Untitled.png

  • 객체 지향 프로그래밍(Object-Oriented Programming) → OOP
    • 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법

객체 지향 방법

객체 지향으로 소프트웨어(코드)를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다

Untitled.png

객체 지향의 3대 특징

캡슐화

캡슐화(encapsulation) : 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것

Untitled.png

→ 객체 지향을 사용하면 코드를 재사용할 수 있다.

캡슐화의 정보 은닉

캡슐화는 정보 은닉 기법중 하나이다.

해당하는 객체를 생성하고 외부에서 해당 객체의 필드, 메소드를 해당 객체 내부에서만 사용할 수 있도록 정보를 은닉하여 보안적인 효과를 얻을 수 있다.

그리고 외부에서 객체의 데이터를 직접 액세스하는 것을 방지하여 잘못된 값이 입력되는 것을 막을 수 있다.

예시

public class User {
	private String user_id; // private로 필드 선언
	private String user_pw; // 외부에서 접근 불가능

	public String getUser_id() { // public 접근 지정자로 외부에서 접근 가능
		return user_id;
	}
	public void setUser_id(String user_id) {
		this.user_id = user_id
	}
}

public class login {
	public static void main(String[] args) {
		User user = new User(); // User 객체를 인스턴스 변수로 불러옴
		user.setUser_id("admin"); // user 객체의 user_id를 setter로 "admin" 이라고 설정
		
		System.out.println(user.getUser_id()); // user 객체의 user_id 값은 반환 받는다.
	}
}

위와 같이 User 클래스 내부의 필드값이 private 접근 지정자라서 외부에서 접근이 불가능하고 setter와 getter로만 접근이 가능하게 하여 보다 보안적으로 향상되는것이 정보 은닉의 장점이다.

상속

상속(inheritance) : 이미 작성된 클래스(부모 클래스)를 이어 받아서 새로운 클래스(자식 클래스)를 생성하는 기법이다.

  • 기존의 코드를 재활용하기 위한 기법

Untitled.png

  • 상속이 되는지 쉽게 확인하는 방법은 “is-a” 개념을 사용하면 쉽다.
  • 개는 동물이다(Dog is a Animal), 스포츠카는 자동차이다(Sport-car is a car)

다형성

하나의 이름(방법)으로 많은 상황에 대처하는 기법

  • 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해 진다.

Untitled.png

  • 위의 예시는 동물이라면 짖거나 소리를 내는 행동(메소드)에 대하여 같기 때문에 같은 이름으로 메소드를 작성한 예이다.

객체 지향의 장점

  • 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다.
  • 코드를 재사용하기 쉽다.
  • 업그레이드가 쉽다.
  • 디버깅이 쉽다.

쉬운 디버깅

  • 예를 들어 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정하여보자 → 하나의 변수를 1000개의 함수에서 변경할 수 있다.
  • 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자 → 하나의 변수를 10개의 메소드에서 변경할 수 있다.

어떤 방법이 디버깅이 쉬울까?

→ 자바는 캡슐화를 사용하기에 각 각의 클래스마다 다 따로 변수가 동작을 하여 오류가 발생을 하면 디버깅을 하기가 쉽다.

자바에서의 객체

  • 객체(Object)는 상태와 동작을 가지고 있다
  • 객체의 상태(state)는 객체의 특징값(속성)이다.
  • 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작이다.

객체의 상태 = 필드

객체의 동작 = 메소드

현실 세계의 객체에서 객체의 필드와 객체의 메소드를 정의하여 보자

객체 상태 동작
전구 켜짐/꺼짐 스위치 켜기/끄기
라디오 켜짐/꺼짐, 볼륨상태 전원 켜기/끄기, 볼륨 조절
강아지 색, 나이, 몸무게, 키 등 앉기, 눕기, 짖기, …
자동차 속도, 기어, 색상, 차량모델, … 속도 up/down, 기어 up/down, …

메시지

  • 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다.

Untitled.png

  • 메시지 전달
반응형
  1. Real World(실제 세계)는 객체로 이루어진다.
  2. 객체 지향
  3. 절차 지향과 객체 지향의 차이
  4. 객체 지향 방법
  5. 객체 지향의 3대 특징
  6. 캡슐화
  7. 캡슐화의 정보 은닉
  8. 상속
  9. 다형성
  10. 객체 지향의 장점
  11. 쉬운 디버깅
  12. 자바에서의 객체
  13. 메시지
'공부/Java' 카테고리의 다른 글
  • [Java]자바 프로그래밍(필드와 메소드)
  • [Java]자바 프로그래밍(클래스와 객체 - 2)
  • [Java]자바 프로그래밍(반복문)
  • [Java]자바 프로그래밍 (변수, 연산자, 수식)
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • shared preference
  • Kotlin
  • 보안
  • Java
  • jsp
  • 컴퓨터
  • docker
  • 키 해시
  • Android Studio
  • ViewModel
  • dreamhack
  • 상속
  • 디버깅키해시
  • android studio 삭제
  • Database
  • 자바빈즈
  • SpringBoot
  • cs
  • 1.9.22
  • 자료구조
  • 프로그래밍
  • 알고리즘
  • Python
  • spring
  • 코틀린기본문법
  • api 통신
  • webhacking
  • native app
  • Computer science
  • React

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Java]자바 프로그래밍(클래스와 객체)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.