전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - 클래스(Class) 1.추상화

2023. 6. 5. 18:14

1. 객체지향언어 : "객체"를 "지향"하는 "언어"로 "객체 중심"으로 돌아간다고 생각하면 됨.

     *지양 => 좋지 않음
     *지향 => 좋음 (추구한다.)

 

2. 객체 : 현실세계에 독립적으로 존재(목적이 있고 가치가 있고 의미가 있는)하는 모든 것들을 의미 (유형, 무형, 개념, ...)

현실세계에서는 객체들간의 상호작용으로 돌아감 (내가 물을 먹는다)

 

3. 객체지향 프로그래밍 : 현실세계의 객체들간의 상호작용

프로그래밍을 통해 가상세계로 구현하는 것 (내가 쇼핑몰에서 로그인 한다)

 

4. 구현하고자 하는 프로그램상의 필요한 객체들을 만들기 위해서(즉, 생성하기 위해서)
: 클래스라는 틀을 먼저 만들어야됨!!

(클래스란? 각 객체들의 속성(정보)들을 담아낼 그릇 같은 존재) => 이름,나이,주소,휴대폰번호 등등을 담을 수 있는 그릇
>> 어떻게 만드는걸까? => 추상화 + 캡슐화 접목해서 만들어야함!

 

5. 추상화 과정

1. 내가 구현하고자 하는 프로그램에서 필요한 객체들을 생각해볼 것 => 쇼핑몰

그 객체들이 가지는 공통적인 속성, 기능들을 모두 추출 => 이름, 나이, 주소, 휴대폰번호, mbti, 혈액형..)

2. 추출한 것들을 가지고 내가 구현하고자 했던 프로그램 "실질적인 목적"에 맞춰 불필요한 속성, 기능들을 제거할  것 => mbti, 혈액형.. 

3. 그렇게 최종적으로 추려진 속성들을 가지고 어떤 자료형으로, 어떤 변수명으로 사용할건지 생각

 

 

ex) 학생 관리 프로그램

 

1. 학생관련객체 (문동은 학생, 박연진 학생, 이사라 학생, ...)

 

2. 공통적인 속성 및 기능들(이름, 나이, 주소, 전화번호, 키, 몸무게, 달리기속도, 학년, 반, 국어점수, 수학점수, 영어점수, 머리색깔, 발사이즈, 밥먹는다, 잠잔다,...)

 

3. 학생 "인적사항"을 관리하는 프로그램 이라고 한다면 : 이름, 나이, 주소, 전화번호, 학년, 반

학생 "성적"을 관리하는 프로그램 이라고 한다면 : 이름, 학년, 반, 국어점수, 수학점수, 영어점수

학생 "건강"을 관리하는 프로그램 이라고 한다면 : 이름, 학년, 반, 키, 몸무게, 달리기속도, 발사이즈

 

4. 결국 추려진게 "이름, 나이, 키"라는 가정하에

이름 : String name;

나이 : int age;

키 : double height; 

 

6. 위에 선정된 것들을 가지고 본격적으로 

1) "변수" 만을 프로그래밍을 한다면?


   변수 - 하나의 자료형의 하나의 값만을 보관할 수 있음


  문동은이라는 학생 객체를 하나 만들어내기 위해서?

   --> String name1 = "문동은"; int age1 = 20; double height = 162.3;


  박연진이라는 학생 객체를 하나 만들어내기 위해서?

   --> String name2 = "박연진"; int age2 = 21; double height = 173.4; 


  이사라이라는 학생 객체를 하나 만들어내기 위해서?

   --> String name3 = "박연진"; int age2 = 22; double height = 150.4;


   .... 등등의 수백명에 해당하는 학생들 만들어야됨!


   어떤문제가 발생 ?? => 수백명에 해당하는 학생들을 만들 때 => 수천개의 변수가 만들어짐

 

 

2) "배열"로 프로그래밍을 한다면?

* 배열 - 하나의 자료형의 여러개의 값들을 보관할 수 있음
   학생들의 이름들을 보관하는 String[] name = {"문동은", "박연진", "이사라",...}
   학생들의 나이를 보관하는  int[] age = {20, 21, 22,...}
   학생들의 키를 보관하는 double[] height = {162.3, 173.4, 150.4,...}

 

어떤문제가 발생??
   => 기존의 학생 정보를 지워야 할 때 뒤의 정보들을 앞으로 땡기는 과정을 진행해야함..
잘못땡기면 정보가 틀어진다..
   => 새로운 학생이 전학오면 ? 배열을 다시만들어야 함 + 복사해야함


3) 그래서 나온 개념이 구조체!!

구조체 - 여러개의 자료형의 여러개의 값들을 보관할 수 있음
String 값도 보관하고, int 값도 보관하고, double 값도 같이 보관할 수 있도록
나만의 배열 같은 자료형을 만들자!! 그게 바로 클래스!!

Student 라는 클래스로 만들꺼임!! => 객체의 정보를 보관할 그릇과도 같은 이런 클래스들은 = model.vo  (패키지) 에 만들꺼임!

 


클래스의 구조

public class 클래스명{

// 필드부

// 생성자부

// 메소드부
	public void method1(){
	
    
    }

}

 

Student 클래스 만들어보기

package com.kh.chap01_abstraction.model.vo;


public class Student {	// 학생을 추상화해서 만든 클래스(완벽한 상태는 아님- 캡슐화 안함)

    // 필드부
    // [표현법] 
    // 접근제한자 [예약어] 자료형 변수명

    // * 접근제한자 : 여기에 접근할 수 있는 법위를 제한하는 것	(왼쪽으로 갈수록 개방)
    // 				public > protected > default > private

    public String name;// 이름
    public int age;// 나이
    public double height;// 키

}

 

클래스를 사용해서 출력해보기

package com.kh.chap01_abstraction.run;

import com.kh.chap01_abstraction.model.vo.Student;

public class AbstractionRun {
	
	public static void main(String[] args) {
		
		// 자바에서의 객체로 만들기 위해서 new 라는 키워드를 통해 
        // Heap영역에 생성 먼저 해야됨!!	(공간할당)
		Student moon = new Student();
		// 클래스명 별칭 = new 클래스명();

//		System.out.println(moon);	// 주소값..
		// 주소값을 담고 있음!! 기본자료형이 아니기 때문에
		
		// 여기까지는 Heap 영역에 할당된 공간에는 JVM의 초기값들이 세팅되어 있을 것
		
		// 각 영역 "직접 접근"을 해서 내가 원하는 값 대입 => public 이라서 개방돼있음
		
		moon.name ="문동은";
		moon.age = 20;
		moon.height = 162.3;
		
		System.out.println(moon);	// 주소값이 출력된다.
		
		System.out.println(moon.name + "님의 나이는 " + moon.age + "살이고, 키는 " + moon.height + "cm 입니다.");
		
		// 문동은 학생 객체 만들기 => 문동은, 20, 162.3
		
		Student park = new Student();
		
		park.name = "박연진";
		park.age = 21;
		park.height = 173.4;
		
		System.out.println(park.name + "님의 나이는 " + park.age + "살이고, 키는 " + park.height + "cm 입니다.");
	}
}

 

필드를 public 접근제한자로 작성
=> 필드에 직접적으로 접근해서 값 대입하거나 값을 가져올 수 있음!!
=> 외부에서 함부로 값을 변질시키거나 조회권한이 없는 사람이 가져올 수 있는 문제 발생!!
>> 캡슐화 작업을 할꺼임!!

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - 클래스(Class)
    • [자바/JAVA] 프로그래밍 - 클래스(Class) 2.캡슐화
    • [자바/JAVA] 프로그래밍 - 배열(Array) 실습 예제
    • [자바/JAVA] 프로그래밍 - 버블정렬 (Bubble Sort)
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바