국비 10

냐아암·2023년 4월 26일
0

국비

목록 보기
14/114

현실에서의 객체

  • 객체 (Object): 독립적으로 각각 구분해서 인식할 수 있는 모든 것-> 자신의 속성(값, data)과 기능(동작, 행동)이 다른 것들과 구분되어 식별가능한 것
    // -물건, 물체, 요소, 대상, 목적
    ex) 키보드, 김치, 나, 조원, 미세먼지, 모래 한 알, 판소리 무형문화제

  • 지향 (Oriented): 어떠한 것을 목표로 함

  • (컴퓨터에서의)언어(Language): 코드, 코딩 방식

  • 객체 지향 언어: 독립적으로 각각 구분해서 인식할 수 있는 것을 목표로 하는 코딩 방식

    //현실세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며, 발생하는 모든 사건들은 객체간의 상호작용이다. 이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.

객체 지향 언어


  • 객체 지향 3+1대 특징
  1. 캡슐화
  2. 상속
  3. 다형성
    +추상화

  • 자바에서 객체
    클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것
  • 클래스 (설계도)
    객체의 특성(속성, 기능)에 대한 정의를 한 것
    -> 추상화, 캡슐화가 적용되어야 함

  • 추상화: 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미 (작성하려는 클래스의 속성과 기능 중 프로그램에서 필요한 공통점을 추출하고 불필요한 부분을 제거하는 과정
  • 캡슐화(Encapsulation)
    -데이터와 기능을 하나로 묶어서 관리하는 기법
    -데이터에 직접적인 접근을 제한하는 것이 원칙이다.
    --> 직접 접근을 못하기 때문에 클래스 내부에 간접 접근 방법을 제공하는 기능을 작성해둔다.

People

package edu.kh.oop.abstraction.model.vo;

//VO (Value Object): 값 저장용 객체를 만들기 위한 클래스를 모아두는 패키지

public class People { //국민(사람)클래스
	
	//클래스: 객체의 특성(속성, 기능)을 정의한 것
	// == 객체를 만들기 위한 설계도
	
	//캡슐화(Encapsulation)
	// -데이터와 기능을 하나로 묶어서 관리하는 기법
	// -데이터에 직접적인 접근을 제한하는 것이 원칙이다.
	// -> 직접 접근을 못하기 때문에 클래스 내부에 간접 접근 방법을 제공하는 기능을 작성해둔다.
	
	//***데이터 직접 접근 제한
	// public(공공의) -> private(사적인, 개인적인) 변경
	
	//속성 == 값 == data
	//값을 저장하기 위한 변수 선언
	
	// ->국민이라면 공통적으로 가지고 있는 속성만 작성(추상화)
	private String name;
	private char gender;
	private String pNo; //123456-1234567 int로 할 경우 연산이 됨
	private String address;
	private String phone;
	private int age;
//	double bitCoin; //공통점이 아님로 제거
	
	//기능 == 행동 ==method
	
	public void tax() {
		System.out.println("세금을 냅니다.");
	}
	public void vote() {
		System.out.println("투표를 합니다.");
	}
	
	//캡슐화에서 사용할 간접 접근 기능(getter/ setter)
	
	public void setname(String name) { //setter
		//외부로부터 전달받은 name을
		//현재 객체의 속성 중 name( == this.name)에 대입
		this.name = name;
	}
	
	public String getName() { //getter
		//현재 객체의 속성 중 name을 호출한 곳으로 반환(return)
		return name;
	}
	public char getGender() {
		return gender;
	}
	public void setGender(char gender) {
		this.gender = gender;
	}
	public String getpNo() {
		return pNo;
	}
	public void setpNo(String pNo) {
		this.pNo = pNo;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//단축키: alt shift S 또는 상단 메뉴 Source 
	// -> Generate Getters and Setters....클릭
	// -> select All -> generate

}

AbstractionService

package edu.kh.oop.abstraction.model.service;

import edu.kh.oop.abstraction.model.vo.People;

//Service: 특정 기능(비즈니스 로직)을 제공하는 클래스

public class AbstractionService {
	//해당 클래스가 객체가 되면 아래 예제 기능을 수행할 수 있다.
	
	public void ex1() {
		
		//국민 개체 만들기
		People p1 = new People();
		//People p1: People 객체의 주소를 저장하여 참조하는 변수p1
		//new People(): 새로운 People 객체를 Heap영역에 생성
		
		//***클래스 이름이 자료형처럼 사용되어진다.
		// -> 그래서 클래스를 "사용자 정의 자료형"이라고 함***
		
		People p2 = new People();
		
		//만들어진 객체는 추상화가 적용되어 있어 누군지 알 수 없다.
		// -> 속성(데이터)를 추가하여 누구인지 알 수 있게 함(구체화)
		
		//p1.name = "다나카"; //The field People.name is not visible
		//직접 접근 방법
		
		p1.setname("다나카"); //setter를 이용한 간접 접근 방법
		//p1.age = 27;
		p1.setAge(27);
//		p1.gender = '남';
		p1.setGender('남');
//		p1.phone = "010-1234-1234";
		p1.setPhone("010-1234-1234");
//		p1.pNo = "002022-12345678";
		p1.setpNo("002121-53697875");
//		p1.address = "서울시 강남구";
		p1.setAddress("서울시 강남구");
		
		System.out.println("p1의 name: "+ p1.getName());
		System.out.println("p1의 age: "+ p1.getAge());
		System.out.println("p1의 gender: "+ p1.getGender());
		System.out.println("p1의 phone: "+ p1.getPhone());
		System.out.println("p1의 pNo: "+ p1.getpNo());
		System.out.println("p1의 address: "+ p1.getAddress());
		
		System.out.println("===============================");
		
//		p2.name = "ㅐㅐㅐ";
//		p2.age = 2;
//		p2.gender = '여';
//		p2.phone = "010-1234-5678";
//		p2.pNo = "981022-12345678";
//		p2.address = "서울시";
//		
//		System.out.println("p2의 name: "+ p2.name);
//		System.out.println("p2의 age: "+ p2.age);
//		System.out.println("p2의 gender: "+ p2.gender);
//		System.out.println("p2의 phone: "+ p2.phone);
//		System.out.println("p2의 pNo: "+ p2.pNo);
//		System.out.println("p2의 address: "+ p2.address);
		
		p1.tax();
		p1.vote();
		p2.tax();
		p2.vote();
		
	}

}

AbstractionRun

package edu.kh.oop.abstraction.run;

import edu.kh.oop.abstraction.model.service.AbstractionService;

public class AbstractionRun {

	public static void main(String[] args) {
		
		AbstractionService as = new AbstractionService();
		
		as.ex1();

	}

}
profile
개발 일지

0개의 댓글