클래스와 객체
- 객체
- 메시지
- 클래스
- 객체 지향
- String 클래스
객체 지향 개념을 완벽하게 이해하여야지 객체 지향 설계의 이점을 활용할 수 있다
Real World(실제 세계)는 객체로 이루어진다.
객체는 우리가 보고 느끼고 인지할 수 있는 그 모든 것을 의미한다고 보면된다.
객체는 자신만의 고유한 특성과 행동을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하면서 존재한다.
객체 지향
실제 세계를 모델링하여 소프트웨어를 개발하는 방법
절차 지향과 객체 지향의 차이
- 절차 지향 프로그래밍(procedural Programming)
- 문제를 해결하는 절차를 중요하게 생각하는 방법
- 객체 지향 프로그래밍(Object-Oriented Programming) → OOP
- 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법
객체 지향 방법
객체 지향으로 소프트웨어(코드)를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다
객체 지향의 3대 특징
캡슐화
캡슐화(encapsulation) : 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것
→ 객체 지향을 사용하면 코드를 재사용할 수 있다.
캡슐화의 정보 은닉
캡슐화는 정보 은닉 기법중 하나이다.
해당하는 객체를 생성하고 외부에서 해당 객체의 필드, 메소드를 해당 객체 내부에서만 사용할 수 있도록 정보를 은닉하여 보안적인 효과를 얻을 수 있다.
그리고 외부에서 객체의 데이터를 직접 액세스하는 것을 방지하여 잘못된 값이 입력되는 것을 막을 수 있다.
예시
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) : 이미 작성된 클래스(부모 클래스)를 이어 받아서 새로운 클래스(자식 클래스)를 생성하는 기법이다.
- 기존의 코드를 재활용하기 위한 기법
- 상속이 되는지 쉽게 확인하는 방법은 “is-a” 개념을 사용하면 쉽다.
- 개는 동물이다(Dog is a Animal), 스포츠카는 자동차이다(Sport-car is a car)
다형성
하나의 이름(방법)으로 많은 상황에 대처하는 기법
- 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해 진다.
- 위의 예시는 동물이라면 짖거나 소리를 내는 행동(메소드)에 대하여 같기 때문에 같은 이름으로 메소드를 작성한 예이다.
객체 지향의 장점
- 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다.
- 코드를 재사용하기 쉽다.
- 업그레이드가 쉽다.
- 디버깅이 쉽다.
쉬운 디버깅
- 예를 들어 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정하여보자 → 하나의 변수를 1000개의 함수에서 변경할 수 있다.
- 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자 → 하나의 변수를 10개의 메소드에서 변경할 수 있다.
어떤 방법이 디버깅이 쉬울까?
→ 자바는 캡슐화를 사용하기에 각 각의 클래스마다 다 따로 변수가 동작을 하여 오류가 발생을 하면 디버깅을 하기가 쉽다.
자바에서의 객체
- 객체(Object)는 상태와 동작을 가지고 있다
- 객체의 상태(state)는 객체의 특징값(속성)이다.
- 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작이다.
객체의 상태 = 필드
객체의 동작 = 메소드
현실 세계의 객체에서 객체의 필드와 객체의 메소드를 정의하여 보자
객체 | 상태 | 동작 |
---|---|---|
전구 | 켜짐/꺼짐 | 스위치 켜기/끄기 |
라디오 | 켜짐/꺼짐, 볼륨상태 | 전원 켜기/끄기, 볼륨 조절 |
강아지 | 색, 나이, 몸무게, 키 등 | 앉기, 눕기, 짖기, … |
자동차 | 속도, 기어, 색상, 차량모델, … | 속도 up/down, 기어 up/down, … |
메시지
- 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다.
- 메시지 전달
클래스와 객체
- 객체
- 메시지
- 클래스
- 객체 지향
- String 클래스
객체 지향 개념을 완벽하게 이해하여야지 객체 지향 설계의 이점을 활용할 수 있다
Real World(실제 세계)는 객체로 이루어진다.
객체는 우리가 보고 느끼고 인지할 수 있는 그 모든 것을 의미한다고 보면된다.
객체는 자신만의 고유한 특성과 행동을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하면서 존재한다.
객체 지향
실제 세계를 모델링하여 소프트웨어를 개발하는 방법
절차 지향과 객체 지향의 차이
- 절차 지향 프로그래밍(procedural Programming)
- 문제를 해결하는 절차를 중요하게 생각하는 방법
- 객체 지향 프로그래밍(Object-Oriented Programming) → OOP
- 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법
객체 지향 방법
객체 지향으로 소프트웨어(코드)를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다
객체 지향의 3대 특징
캡슐화
캡슐화(encapsulation) : 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것
→ 객체 지향을 사용하면 코드를 재사용할 수 있다.
캡슐화의 정보 은닉
캡슐화는 정보 은닉 기법중 하나이다.
해당하는 객체를 생성하고 외부에서 해당 객체의 필드, 메소드를 해당 객체 내부에서만 사용할 수 있도록 정보를 은닉하여 보안적인 효과를 얻을 수 있다.
그리고 외부에서 객체의 데이터를 직접 액세스하는 것을 방지하여 잘못된 값이 입력되는 것을 막을 수 있다.
예시
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) : 이미 작성된 클래스(부모 클래스)를 이어 받아서 새로운 클래스(자식 클래스)를 생성하는 기법이다.
- 기존의 코드를 재활용하기 위한 기법
- 상속이 되는지 쉽게 확인하는 방법은 “is-a” 개념을 사용하면 쉽다.
- 개는 동물이다(Dog is a Animal), 스포츠카는 자동차이다(Sport-car is a car)
다형성
하나의 이름(방법)으로 많은 상황에 대처하는 기법
- 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해 진다.
- 위의 예시는 동물이라면 짖거나 소리를 내는 행동(메소드)에 대하여 같기 때문에 같은 이름으로 메소드를 작성한 예이다.
객체 지향의 장점
- 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다.
- 코드를 재사용하기 쉽다.
- 업그레이드가 쉽다.
- 디버깅이 쉽다.
쉬운 디버깅
- 예를 들어 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정하여보자 → 하나의 변수를 1000개의 함수에서 변경할 수 있다.
- 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자 → 하나의 변수를 10개의 메소드에서 변경할 수 있다.
어떤 방법이 디버깅이 쉬울까?
→ 자바는 캡슐화를 사용하기에 각 각의 클래스마다 다 따로 변수가 동작을 하여 오류가 발생을 하면 디버깅을 하기가 쉽다.
자바에서의 객체
- 객체(Object)는 상태와 동작을 가지고 있다
- 객체의 상태(state)는 객체의 특징값(속성)이다.
- 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작이다.
객체의 상태 = 필드
객체의 동작 = 메소드
현실 세계의 객체에서 객체의 필드와 객체의 메소드를 정의하여 보자
객체 | 상태 | 동작 |
---|---|---|
전구 | 켜짐/꺼짐 | 스위치 켜기/끄기 |
라디오 | 켜짐/꺼짐, 볼륨상태 | 전원 켜기/끄기, 볼륨 조절 |
강아지 | 색, 나이, 몸무게, 키 등 | 앉기, 눕기, 짖기, … |
자동차 | 속도, 기어, 색상, 차량모델, … | 속도 up/down, 기어 up/down, … |
메시지
- 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다.
- 메시지 전달