c0's code

객체의 정의 본문

JAVA/객체

객체의 정의

leec0 2023. 10. 27. 09:51
  1. 객체지향언어: "객체"를 "지향"하는 언어로 "객체 중심"으로 돌아간다고 생각하면됨
  2. 객체 : 현실세계에 독립적으로 존재(목적이 있고 가치가 있고 의미가 있는) 하는 모든것들을 의미 (유형, 무형, 개념, ...) 현실세계에서는 객체들간의 상호작용으로 돌아감
  3. 객체지향 프로그래밍 : 현실세계의 객체들간의 상호작용 프로그래밍을 통해 가상세계로 구현하는 과정
    구현하고자 하는 프로그램 상의 필요한 객체들을 만들기 위해서 (즉, 생성하기 위해서) : 클래스라는 틀을 먼저 만들어야됨!! (클래스란? 각 객체들의 속성 (정보)들을 담아낼 그릇같은존재)
    어떻게? ==> 추상화 + 캡슐화 접목해서

  4. 추상화 과정
    1. 내가 구현하고자 하는 프로그램에서 필요한 객체들을 생각해볼 것
    2. 그 객체들이 가지는 공통적인 속성, 기능들을 모두 추출할 것
    3. 추출한 것들을 가지고 내가 구현하고자 했던 프로그램의 "실질적인 목적"에 맞춰 불필요한 속성, 기능들을 제거할 것
    4. 그렇게 최종적으로 추려진 속성들을 어떤 자료형으로, 어떤 변수명으로 사용할 건지 생각
    ex) 학생 관리 프로그램
    1. 학생관련객체(홍길동학생, 김영희학생, 아무개학생....)
    2. 공통적인 속성 및 기능들 (이름, 나이, 주소, 전화번호, 키, 몸무게, 달리기속도, 학년, 반, 국어점수, 수학점수, 영어점수, 머리색깔, 발사이즈, 먹는다, 잠잔다, ...)
    3. 학생 "인적사항"을 관리하는 프로그램: 이름, 나이, 주소, 전화번호, 학년, 반 학생 "성적"을 관리하는 프로그램 : 이름, 학년, 반, 국어점수, 수학점수, 영어점수 학생 "건강"을 관리하는 프로그램 : 이름, 학년, 반, 키, 몸무게, 달리기 속도, 간수치,
    4. 결국 추려진게 "이름, 나이, 키" 라는 가정하에
    5. 이름 : String name; 나이 : int age; 키 : double height;
  5. 위에 선정된 것들을 가지고 본격적인 프로그래밍을 예정
    1. **"변수"**만으로 프로그래밍을 한다면??
      • 변수 - 하나의 자료형의 하나의 값만을 보관할 수 있음
      홍길동 학생 객체 생성 --> String name1 "홍길동"; int agel = 20; double height1 = 162.3; 길말똥 학생 객체 생성 --> string name2 = "김말똥"; int age2 = 21; double height2 = 173.4; 강개순 학생 객체 생성 --> String name3 = "강개순"; int ages 22; double height3 = 182.7; 등등의 수백명에 해당하는 학생들을 만들어야됨
    2. 어떤문제가 발생?? => 수백명에 해당하는 학생들을 만들때 =>수천개의 변수가 만들어짐!!
    3. "배열"로 프로그래밍을 한다면??
      • 배열 - 하나의 자료형의 여러개의 값들을 보관할 수 있음어떤문제가 발생?? => 기존의 학생 정보를 지워야 할때 뒤의 정보들을 앞으로 땡기는 과정을 진행해야되는데 혹시라도 실수하면 학생의 정보가 뒤바뀔수있음 새로운 학생 정보를 기록해야될 때 배열의 크기를 변경할 수 없기 때문에 새로운크기의 배열을 만들어서 기존껄 복사한다거나 이런식으로 과정이 복잡
      • 학생들의 이름들을 보관하는 String[] name = {"홍길동", "아무개", "이순신", ...} 학생들의 나이들을 보관하는 int[] age = { 20 , 21 , 22 , ...} 학생들의 키들을 보관하는 double[] height = { 162.3, 173.4 , 182.7 , ...}
    4. 그래서 나온 개념이 구조체의 개념
      • 구조체 - 여러개의 자료형의 여러개의 값들을 보관할 수 있음 String값도 보관하고, int값도 보관하고, double값도 같이 보관할 수 있도록 나만의 배열같은 자료형을 만들자!!! 그게바로 클래스!! Student 라는 클래스로 만듬
  6. 캡슐화 과정까지 적용해서 완벽한 클래스의 형태를 갖추게끔!!
    • 캡슐화 : 추상화를 통해 정의된 속성들과 기능들을 하나로 묶어 관리하는 기법중 하나로 클래스에서의 가장 중요한 목적인 "데이터의 접근 제한"을 원칙으로 외부로부터 "데이터의 직접 접근을 막고" 대신에 "데이터를 간접적으로나마 처리(값을 대입, 값을 돌려준다거나)"할 메소드들 클래스 내부에 작성해서 관리하는 방법
    1. 정보은닉: private 직접 접근을 막기 위해 private 라는 접근제한자 사용
    2. setter/getter 메소드 private 하는 순간 필드에 접근 불가 setter메소드 : 해당 필드에 대입시키고자 하는 값 전달받아 해당 필드에 대입시켜주는
Comments