java/oop

[oop] 2. 큎래슀와 객첎 (feat.접귌지정자(Access Modifier) 섀정)

jeri 2024. 4. 14. 12:56
반응형
oop > Method.java
oop > MehtodApp.java

 

📌1. 큎래슀 만듀Ʞ

 

1) 큎래슀(Class)란?

  • 객첎륌 만듀Ʞ 위한 자료형 (찞조형)
    • 큎래슀륌 만듀얎알 객첎륌 생성할 수 있음
    • 객첎(object) 대신 읞슀턎슀(instance)로 표현 가능
  • 현싀섞계의 졎재하는 사묌 또는 ꎀ념을 큎래슀띌는 자료형윌로 표현하여 객첎로 구현
  • 큎래슀 = 섀계도 (메몚늬는 찚지하지만 싀첎는 없닀!)
  • 큎래슀로 만든 객첎 = 읞슀턎슀 = 객첎 . . 몚두 같은 말
  • 하나의 큎래슀로 객첎륌 여러개 만듀 수 있음
    • 큎래슀 : 현싀섞계에서 프로귞랚윌로 쓰읎Ʞ 위한 자료형
    • 객첎 : 프로귞랚에서 쓰읎는 현싀섞계의 대상읎 됚
  • 큎래슀는 객첎륌 만듀Ʞ 위한 틀, Ʞ계, 장치 ,섀계도 읎닀
  • 큎래슀 = 자료형!!!

 

2) 큎래슀 ì„ ì–ž 형식 (필드, 생성자, 메소드)

//=> 필드에는 프로귞랚 싀행에 필요한 값을 저장하고, 메소드로 필드값을 사용하여 원하는 Ʞ능을 제공
[public] class 큎래슀명 {
    //🌕필드(Field) : 대상의 속성을 표현하여 속성값을 저장하Ʞ 위핎 선얞된 변수 ( = 멀버변수)
    //🌕생성자(Constructor) : 객첎 생성을 목적윌로 선얞된 메소드
    //🌕메소드(Method) : 대상의 행위륌 명령의 몚임윌로 표현하Ʞ 위핎 선얞된 핚수 ( = 멀버핚수)
}

🌕필드(Field) : 필요한 값을 저장핎둠

  • 대상의 속성을 표현하여 속성값을 저장하Ʞ 위핎 선얞된 변수 ( = 멀버변수)
  • 지역변수가 아니Ʞ 때묞에 음반적읞 지역변수와 비교하Ʞ 위핎 멀버변수띌고도 부늄
  • 필드는 지역변수와 달늬 생성자와 메소드 전첎에서 사용되며 소멞되지 않는 한 객첎와 핚께 졎재
  • 속성, 필드, 멀버변수
  • 객첎(안슀턎슀) 생성 시 필드도 핚께 생성되며, 생성된 객첎의 필드값에는 Ʞ볞값읎 자동 쎈Ʞ화됚
  • 쎈Ʞ값읎 저장되지 않은 필드는 객첎 생성 시 자동윌로 Ʞ볞 쎈Ʞ값읎 듀얎감
    • Ʞ볞값 : 숫자형:0 , 녌늬형:false , 찞조형:null
  • 필드에 필요한 값을 저장하여 메소드로 필드값을 사용하여 원하는 Ʞ능을 제공
  • 필드의 목적) 값 저장!
  • 메소드에서 사용할 값듀을 저장하Ʞ 위핎 만드는 것
  • 필드는 Ʞ볞적윌로 몚든 메소드에서 사용가능!! (공통적 사용)
  • 필드는 왜 만듀까?? 귞것은 몚두 행위(메소드)륌 구현하Ʞ 위한 것
    행위가 음얎나멎 필드에 영향을 쀄 수 있음 !! ( 행위 ↔ 메소드 )

🌕생성자(Constructor)

  • 객첎 생성을 목적윌로 선얞된 메소드
  • 얎떠한 Ʞ능을 제공핎죌는 것읎 아닌 객첎 생성을 목적윌로 핹!
  • 생성자 생략가능 - 생략하멎 컎파음러가 Ʞ볞생성자륌 자동 추가핎쀌
  • 생성자가 없윌멎 절!대! 객첎 만듀 수 없음
  • 생성자륌 만듀지 않윌멎 자첎적윌로 Ʞ볞생성자륌 만듀얎 읞식핎쀌

🌕메소드(Method)

  • 메소드로 필드값을 사용핎 원하는 Ʞ능 제공
  • 대상의 행위륌 명령의 몚임윌로 표현하Ʞ 위핎 선얞된 핚수 ( = 멀버핚수)
  • 핚수란?
    • 값(데읎터)을 처늬하는 명령듀의 몚임
    • 당, 입출력명령 작성 안핚!!!!!
  • 큎래슀에서 가장 쀑요한 것은 메소드!!
  • 왜 쀑요핎? 메소드 안에 명령듀읎 듀얎있Ʞ때묞
  • 닀양한 메소드듀을 통핎 원하는 객첎에서 Ʞ능을 구현할 수 있음
  • 메소드가 없는 큎래슀는 졎재 가치가 없음!!!

 

3) 큎래슀 작성 시 죌의사항

  • 큎래슀파음(Car.java)곌 프로귞랚파음(CarApp.java)의 분늬작성하Ʞ
    • 음반적윌로 소슀파음 하나당 큎래슀파음 하나만 만드는 것읎 좋음
    • 원래는 하나의 소슀파음에 큎래슀파음곌 프로귞랚 파음 한꺌번에 작성 가능 하나의 소슀파음에 여러개의 큎래슀 파음 작성 가능
    • 하지만 ì°žì¡°í•  큎래슀와 싀행할 큎래슀륌 따로 만듀얎알 나쀑에 배포가 가능하므로 읎 둘은 분늬핎서 작성하도록 하자

 

 
 

📌2. 객첎 만듀Ʞ

 

1) 객첎 생성 형식

큎래슀명 찞조변수 = new 큎래슀명();

//큎래슀명 : 큎래슀륌 만드는 객첎의 자료형 작성
//찞조변수 : 찞조변수 식별자 작성
  • STEP1. new 연산자로 큎래슀명();을 가진 큎래슀의 생성자 혞출
    • 생성자의 읎늄 = 큎래슀 읎늄 읎Ʞ 때묞에 new 큎래슀명()윌로 혞출핚
    • 생성자가 혞출됚윌로서 객첎륌 생성할 수 있닀.
    • 슉, 생성자륌 잘못 혞출하멎 객첎가 생성되지 않음!! 죌의!!!!!!!
    • 몚든 큎래슀는 생성자가 반드시 졎재하며, 생성자륌 하나 읎상 가질 수 있음
    • 만앜, 큎래슀 낎부에 생성자 선얞을 생략했닀멎 컎파음러가 Ʞ볞생성자륌 바읎튞윔드에 자동윌로 추가핚
  • STEP2. 생성자륌 잘 혞출했닀멎 힙메몚늬에 객첎가 만듀얎질 것임
    • 힙은 읎늄읎 없Ʞ 때묞에 객첎의 죌소륌 닎을 수 있는 찞조변수 ꌭ 만듀Ʞ
    • 슉, 찞조변수로 객첎의 죌소 저장
  • STEP3. 찞조변수에 저장된 객첎는 .연산자로 접귌하여 필드 또는 메소드륌 사용핎 프로귞랚 작성

 
 

 
 

📌3. 메소드 만듀Ʞ

 

1) 메소드 (Method)란?

  • 필드륌 사용하여 필요한 Ʞ능을 제공하Ʞ 위한 명령듀의 몚임

 

2) 메소드 ì„ ì–ž 형식

자료형 메소드명(자료형 변수명, 자료형 변수명, ...){
	//명령;
    	//명령;
    	//...
}
//🔥메소드 안 명령묞 작성 시 죌의사항!
//=> 메소드 안 명령은 값(데읎터)을 처늬하는 명령듀만 작성할 것
//=> 싀제 메소드 안 명령듀의 역할은 데읎터륌 처늬하여, 반환값읎 있닀멎 결곌값을 알렀쀌
//=> 값을 입출력 하는 명령듀은 안씀 ex. System.out.println(); 등등
//=> 왜 안썚요? 프로귞랚마닀 입출력하는 방법읎 닀륎므로 입출력 명령묞을 작성하멎 안돌!!
//=> 큎래슀는 독늜적읎얎알핚
//=> 귞래알 입출력읎 서로 닀륞 닀양한 프로귞랚듀 안에서 사용읎 가능한 것!!
//=> ex. 웹프로귞래밍, 게임프로귞래밍 ..
//=> 찞고로 **웹프로귞랚에서의 입출력**은 람띌우저!!!!!

🌕 반환형(ReturnType)

  • 메소드륌 혞출하여 얻을 수 있는 결곌값의 자료형
  • 결곌형(ResultType)읎띌고도 부늄
  • 반환형 예시 )
//int 자료형을 반환하는 메소드
int 메소드명(자료형 변수명, 자료형 변수명, ...){
		//값을 계산하는 명령;
		//데읎터륌 처늬하는 명령;
		//필드값을 가젞닀가 쓞 수도 있음...
}

//결곌값의 자료형은 [Ʞ볞형 - int, double..] [찞조형-String ...] 몚두 ë‹€ 가능
  • void : 묎반환형
    • 메소드륌 혞출하여 얻을 수 있는 결곌값읎 없는 겜우 사용하는 자료형
    • 명령만 싀행하고 끝나는 반환값 없읎 끝나는 메소드는 void자료형 사용핚

🌕 맀개변수(Parameter = Argument)

  • 메소드의 명령을 싀행하Ʞ 위핎 메소드륌 혞출 시 값을 전달받아 저장하Ʞ 위한 변수

🌕 필드사용

  • 필드륌 읎용하여 메소드 안에서 사용할 수 있음 , 묎조걎 맀개변수륌 통핎 값읎 전달되는 것은 아님!!

🌕 return 킀워드 (제얎묞)

  • 역할1) 메소드 종료
    • 조걎식읎 만족할 때 메소드륌 강제로 종료할 수 있음
    • 반환값읎 없얎도 return묞을 만나멎 ê·ž 슉시 메소드 종료
    • 반복묞의 break와 같은 역할
//형식) 
//조걎식의 결곌가 찞읞 겜우 메소드 종료 - 반환형) void
if(조걎식) return;
  • 역할2) 메소드 종료 시 대상의 값을 반환하여 메소드륌 혞출한 명령에게 제공
//형식)
//메소드의 반환형곌 반환되는 대상의 자료형읎 반드시 동음핎알핚
return 대상;

 

🌕 메소드 혞출(Method Invoke) 형식

  • 메소드륌 혞출핎알 메소드의 명령을 싀행하여 Ʞ능을 제공받을 수 있음
객첎.메소드명(값, 값, ...);
  • 객첎가 저장된 찞조변수륌 읎용하여 메소드에 접귌핎 메소드 혞출
  • 메소드 혞출시 나엎된 값읎 맀개변수에 찚례대로 전달되얎 저장
  • 맀개변수에 값읎 정상적윌로 전달되지 않은 겜우 메소드 혞출 불가능
  • 객첎 없읎도 혞출은 가능한 부분도 있지만, Ʞ볞적윌로 객첎 뚌저 생성 후 메서드륌 혞출 할 수 있음

 

3) 메소드 혞출 시 슀레드의 역할

  • 프로귞랚을 위에서 하나씩 흐늄대로 읜닀가 메소드륌 만나멎 슀레드가 ê·ž 메소드륌 갖고 있는 곳에 가서 명령을 하나씩 싀행핎죌고 값을 가지고 닀시 되돌아옎
  • 💞 메소드륌 혞출하닀
    • 🎩슀레드( 프로귞랚 흐멄)가 프로귞랚을 위에서 하나씩 흐늄대로 읜닀가 메소드륌 만나멎 →
    • 슀레드가 ê·ž 객첎의 메소드륌 갖고 있는 곳윌로 읎동핎 명령을 하나씩 싀행핎죌고 →
    • 메소드가 종료되멎 반환값 만을 가지고 닀시 되돌아와 프로귞랚을 싀행핚
    • 🎩슀레드: 슀레드는 찞조변수가 찞조하는 객첎의 메소드로 읎동핎 명령을 싀행하고, 메소드가 종료되멎 닀시 되돌아와 닀음 윔드 싀행핎쀌

4) 꿀팁

🍯읎큎늜슀 > Project > build Automatically

  • 프로젝튞 낮 큎래슀듀끌늬는 서로 ì°žì¡°ê°€ 가능한 Ʞ능!
  • 서로 가젞닀 쓞 수 있고, 띌읎람러늬도 가젞닀 쓞 수 있음

🍯package 명시 필요할 때

//프로젝튞 낮 같은 팚킀지에 있는 큎래슀듀은
Method method = new Method(); //띌고 작성가능하지만,

//프로젝튞 낮 닀륞 팚킀지에 있는 큎래슀듀은
oop.Method method = new Method(); //띌고 작성핎알핚

 
 
🍯메소드 혞출 시 error메섞지가 뜹는 읎유 : 맀개변수에 값을 정상적윌로 전달핎알만 메소드의 명령읎 싀행됚

  • 맀개변수와 전달 읞자값의 자료형읎 음치하는가? 판당
  • 전달하는 읞자의 갯수가 음치하는가? 판당

🍯API 묞서 쀑 맀개변수에 (object...args) 띌고 쓰여있닀멎? 0개 읎상의 맀개변수 값을 전달하멎 됚

5) Method.java

package A_oop;

//ì°žì¡°ê°€ 목적읞 큎래슀 - 객첎 생성을 위한 큎래슀
public class Method {
	//1.
	//반환값읎 없는 메소드 - void
	void displayOne() { System.out.println("### Method 큎래슀의 displayOne() 메소드 혞출 ###"); }
	void displayTwo() { System.out.println("### Method 큎래슀의 displayTwo() 메소드 혞출 ###"); }
	void printOne() {
		int tot=0;
		for(int i=1;i<=100;i++) { tot+=i; }
		System.out.println("1~100 범위의 정수듀의 합계 = "+ tot);
	}
	//메소드 혞출시 맀개변수에 값읎 정상적윌로 전달되얎 저장되알만 메소드의 명령 싀행
	// => 맀개변수에 값읎 저장되지 않을 겜우 메소드 혞출 불가능 - 에러 발생
	void printTwo(int num) {
		//맀개변수에 저장된 값에 대한 검슝 - 유횚성검사 (쓰레Ʞ값읎멎 메소드종료)
		if(num<0) {//비정상적읞 값읎 맀개변수에 저장된 겜우
			System.out.println("[에러]맀개변수에 0볎닀 큰 정수값읎 저장되얎알 됩니닀.");
			return;//메소드 종료
		}
		int tot=0;
		for(int i=1;i<=num;i++) {
			tot+=i;
		}
		System.out.println("1~"+num+" 범위의 정수듀의 합계 = "+ tot);
	} 
	void printThree(int num1, int num2) {
			/*
			if(num1>num2) {//비정상적읞 값읎 맀개변수에 저장된 겜우
				System.out.println("[에러]첫번짞 전달값읎 두번짞 전달값볎닀 작아알 됩니닀.");
				return;//메소드 종료
			}
			*/
			//맀개변수에 저장된 값에 대한 검슝 - (쓰레Ʞ값읎멎 값 바꿔죌Ʞ)
			if(num1>num2) {
				int temp=num1;
				num1=num2;
				num2=temp;
			}	
			int tot=0;
			for(int i=num1;i<=num2;i++) {
				tot+=i;
			}
			System.out.println(num1+"~"+num2+" 범위의 정수듀의 합계 = "+ tot);
		}

	//2.
	//반환값읎 있는 메소드
	int returnTot(int num1, int num2) {
		if(num1>num2) {
			int temp=num1;
			num1=num2;
			num2=temp;
		}
		int tot=0;
		for(int i=num1;i<=num2;i++) {
			tot+=i;
		}
		//변수에 저장된 값을 메소드 종료하며 반환
		// => 반환되는 값의 자료형곌 메소드 반환형읎 반드시 동음
		return tot;
	}
	//맀개변수로 정수값을 전달받아 홀수와 짝수륌 구분하여 반환하는 메소드 - false 반환 : 홀수, true 반환 : 짝수
	boolean isOddEven(int num) {
		if(num%2!=0) {
			return false;
		} else {
			return true;
		}
	}

	//3.
	//배엎을 반환하는 메소드
  	//방법1.
	int[] returnArray() {
		//찞조죌소로 배엎객첎 생성 후 반환
		int[] array = {10, 20, 30, 40, 50};
		return array; //메몚늬 죌소 반환 (=ë°°ì—Ž 반환)
		//메몚늬죌소 안닀 = ë°°ì—Ž ì°žì¡°í•  수 있닀 = 배엎의 요소값듀읎 반환된닀
	}
    
  //방법2.
  int[] returnArray() {
	  	//메소드 낮 찞조죌소륌 사용할 것 아니멎 찞조죌소로 배엎객첎 접귌할 필요 없음
		//닀음곌 같읎 생성핎 반환하멎 됚
		return new int[] {10,20,30,40,50};
	}
    
	//반환값읎 배엎읎 아님 error
	/*
  	int[] returnArray() {
		return {10,20,30,40,50}; //error
	}
	*/

	//4.
	//맀개변수의 자료형에 따륞 메소드
	//3개의 맀개변수에 정수값을 전달받아 합계륌 계산하여 반환하는 메소드
	int sumOne(int num1, int num2, int num3) {
		return num1+num2+num3;
	}
	//배엎을 전달받아 배엎의 몚든 요소값듀의 합계륌 계산하여 반환하는 메소드
	int sumTwo(int[] array) {
		int tot=0;
		for(int num:array) {
			tot+=num;
		}
		return tot;
	}
	//맀개변수 생략 Ʞ혞(...)륌 사용하여 맀개변수륌 선얞한 겜우 값을 0개 읎상 전달받아 저장 가능
	// => 맀개변수로 값듀을 전달받아 낎부적윌로 배엎을 생성하여 요소값윌로 저장
	int sumThree(int...array) {
			int tot=0;
			for(int num:array) {
				tot+=num;
			}
			return tot;
		}
	}

 

6) MethodApp.java

package A_oop;

//싀행읎 목적읞 큎래슀 => main 메소드가 선얞된 큎래슀 - 프로귞랚
public class MethodApp {
	public static void main(String[] args) {
        //1.
        //큎래슀로 객첎륌 생성하여 객첎의 메몚늬 죌소륌 찞조변수에 저장
    	Method method=new Method();

		// => 같은 팚킀지의 큎래슀는 팚킀지 표현없읎 큎래슀만 사용하여 ì ‘ê·Œ 가능
    	//oop.Method method = new Method();
		// => 찞조변수륌 사용하여 객첎의 필드 또는 메소드 ì ‘ê·Œ

		//찞조변수에 저장된 값을 출력할 겜우 "자료형@메몚늬죌소" 형식윌로 제공된 결곌값 출력
		System.out.println("method = "+method); //method = oop.Method@5aaa6d82

		//2.
		//메소드 혞출 : 메소드륌 혞출하멎 프로귞랚 흐멄(슀레드)읎 객첎의 메소드로 읎동하여 메소드의 명령을 싀행하고 메소드가 종료되멎 닀시 되돌아와 닀음 명령 싀행
		method.displayOne(); //### Method 큎래슀의 displayOne() 메소드 혞출 ###
		method.displayTwo(); //### Method 큎래슀의 displayOne() 메소드 혞출 ###
		method.displayOne(); //### Method 큎래슀의 displayTwo() 메소드 혞출 ###
		
  		method.printOne(); //1 ~ 100 범위의 정수듀의 합계 = 5050
		method.printOne(); //1 ~ 100 범위의 정수듀의 합계 = 5050	
		//method.printTwo(); //error: 맀개변수가 없얎요
		//method.printTwo(10,20); //error :읞자갯수가 달띌요
		//method.printTwo(10.5,20.1); //error :자료형읎 달띌요
		method.printTwo(1200); //1 ~ 1200 범위의 정수듀의 합계 = 720600
		method.printTwo(30);   //1 ~ 30 범위의 정수듀의 합계 = 465
		method.printTwo(-30);  //유횚성검슝윔드 작성 전)  1 ~ -30 범위의 정수듀의 합계 = 0
										       //유횚성검슝윔드 작성 후) [에러] 맀개변수에 0볎닀 큰 정수값읎 저장되얎알 합니닀.
	
		//메소드륌 혞출할 때 입력값읎 유횚한 값윌로 반환읎 되는지 따젞볎고,
		//유횚성을 검슝할 수 있도록 메소드 낎부에 윔드가 작성되얎있얎알 한닀.
		//🔥볎통은 입력한 값읎 유횚값읎 아니띌멎 출력 안되고, 에러메섞지가 뜚도록 만든닀.

		//메소드 혞출시 나엎될 값읎 맀개변수에 찚례대로 전달되얎 저장
		method.printThree(25, 75); //25~75 범위의 정수듀의 합계 = 2550
		method.printThree(12, 96); //12~96 범위의 정수듀의 합계 = 4590
		method.printThree(77, 45); //45~77 범위의 정수듀의 합계 = 2013
		

		//3.
		//메소드륌 혞출하여 반환되는 결곌값을 변수에 저장
		// => 메소드 명령에 대한 결곌값을 지속적윌로 사용할 겜우 변수에 저장
		// => 혞출 메소드가 종료되멎 반환값을 변수에 저장핚
		// => [반환값 자료형 = 메소드의 변환형 = 저장할 변수의 자료형] 반드시 동음핎알핎핚
		int tot=method.returnTot(34, 86);
		//입력곌 출력 명령은 프로귞랚에서 작성
		// => 메소드에서는 값에 대한 계산만 하고 입력곌 출력은 믞작성 - 프로귞랚에 대한 독늜성 확볎
		System.out.println("합계(메소드 혞출의 반환 결곌값) = "+tot); //합계(메소드 혞출의 반환 결곌값) = 3180
		//반환값을 음시적윌로 사용할 겜우 변수에 믞저장
		System.out.println("합계 = "+method.returnTot(40,80)); //합계 = 2460
        
		//4.
		boolean result=method.isOddEven(10);        
		if(result) {
			System.out.println("맀개변수에 전달된 값은 [짝수]입니닀.");
		} else {
			System.out.println("맀개변수에 전달된 값은 [홀수]입니닀.");
		}
    	//맀개변수에 전달된 값은 [짝수]입니닀.

		//if 구묞의 조걎식 대신 녌늬값을 반환하는 메소드륌 혞출하여 명령 선택 싀행
		if(method.isOddEven(11)) {
			System.out.println("맀개변수에 전달된 값은 [짝수]입니닀.");
		} else {
			System.out.println("맀개변수에 전달된 값은 [홀수]입니닀.");
		}
    	//맀개변수에 전달된 값은 [홀수]입니닀.

		//메소드 혞출시 반환되는 배엎의 메몚늬 죌소륌 찞조변수에 저장 - 배엎의 요소 ì°žì¡° 가능
		int[] array=method.returnArray();
		for(int num:array) {
			System.out.print(num+" ");
		}
		System.out.println(); //10 20 30 40 50
		System.out.println("합계 = "+method.sumOne(10, 20, 30)); //합계 = 60
		//맀개변수에 값읎 정상적윌로 전달되지 않을 겜우 메소드 혞출에 대한 에러 발생
		//System.out.println("합계 = "+method.sumOne()); //error
		//System.out.println("합계 = "+method.sumOne(10, 20)); //error
		//System.out.println("합계 = "+method.sumOne(10, 20, 30, 40)); //error

		//배엎은 통짞로 전달하Ʞ 때묞에 0개륌 전달핎도 error가 아니닀.
		//슉, 몇개륌 전달하든 상ꎀ없닀
		//닚점은 메소드륌 혞출하는 것읎 너묎 불펞하닀ㅠ 더 좋은 방법읎 없나?
		//System.out.println("합계 = "+method.sumTwo({10,20,30})); //error
		System.out.println("합계 = "+method.sumTwo(new int[]{10, 20, 30})); //합계 = 60
		System.out.println("합계 = "+method.sumTwo(new int[]{})); //합계 = 0
        System.out.println("합계 = "+method.sumTwo(new int[]{10, 20})); //합계 = 30
		System.out.println("합계 = "+method.sumTwo(new int[]{10, 20, 30, 40})); //합계 = 100

		//몇개의 값을 전달하든 였류나지 않는닀.
		//슉, 전달할 맀개변수의 값을 몚륌 때 사용하자!!!
		System.out.println("합계 = "+method.sumThree(10, 20, 30));//합계 = 60
		System.out.println("합계 = "+method.sumThree());//합계 = 0
		System.out.println("합계 = "+method.sumThree(10, 20));//합계 = 30
		System.out.println("합계 = "+method.sumThree(10, 20, 30, 40));//합계 = 100

	}
}

 

 
 

 
 
 
 

7) 🔥 필드 작성 시 죌의사항

  • vs 메소드는 검슝구현윌로 잘못된 결곌 발생 시 종료시킬 수 있음
  • 하지만 필드는 객첎로 접귌핎서 필드값을 바로 변겜할 수 있Ʞ 때묞에, 필드에 잘못된 데읎터가 저장될 수 있음
  • 따띌서 필드에 직접적읞 접귌할 수 없도록 하는 것읎 맀우쀑요
  • 메소드 자첎에 묞제가 없얎도 필드때묞에 쓰레Ʞ값읎 나올수도 있음
  • 객첎가 필드에 직접 접귌하지 않고, 반드시 메소드륌 통핎서 접귌할 수 있도록 만듀Ʞ

🔐 [STEP1] 필드(Field)의 "은닉화 처늬" - 접귌지정자 private읎용

  • 앞윌로 우늬가 프로귞랚을 만듀 때 대닀수의 필드륌 은닉화 처늬 할 예정
  • 은닉화 처늬(Data Hiding)란? ì ‘ê·Œ 지정자륌 🔐private로 섀정핎 객첎가 필드에 직접 접귌하지 못하도록 필드륌 숚겚두는 것
  • 🔥 죌의사항)시슀템필드는 은닉화 선얞된 필드지만, 왞부에서 접귌하지 못하게 낎부에서만 사용하는 값듀임
    슉, Getter & Setter(데읎터접귌메소드) 사용 못핚
  • 예시
//Car.java
public class Car {
	//Field (private = 직접 값변겜 못핎!)
	private String modelName;
	private boolean engineStatus;
	private int currentSpeed;

	//Method (public = 아묎나 ë‹€ 듀얎와!)
	public void startEngine() { }
	public void stopEngine() { }
	public void speedUp(int speed) {}
	public void speedDown(int speed) {}
	public void speedZero() { }
}

 

💊 [STEP2] 필드의 "캡슐화작업"

  • 캡슐화작업읎란?
    • 의믞1) 형태상의 캡슐화
      • 표현 대상을 속성(필드)곌 행위(메소드)로 묶얎 큎래슀로 선얞하는 것
    • 의믞2) 은닉화
      • 필드륌 은닉화 처늬하여 볎혞하여 사용되도록 섀정하는 작업 ( ✔ )
      • 은닉화 처늬된 필드륌 위핎 필드값을 변겜하는 Getter메소드와 필드값을 반환하는 Setter메소드륌 선얞하는 것
      • 특히 필드(데읎터저장)는 왞부 접귌윌로부터 볎혞되얎알 핹

 
 
 

8) 🔥메소드 작성 시 죌의사항

  • 메소드에 잘못된 결곌륌 죌멎 싀행읎 안되도록 섀계 하는 것읎 쀑요
  • 여러가지 검슝을 통핎 메서드가 잘 처늬될 수 있도록 만듀얎쀘알핚
  • 정상적읞 CRUD할 수 있도록 검슝 ꌭ 핎죌Ʞ
    • 메서드의 잘못된 결곌륌 죌멎 싀행읎 안되도록 섀계
    • 앞윌로 삜입, 삭제, 변겜, 검색 처늬하는 메소드 많읎 만듀 것임!
      • if (잘못되었을 때 ) → 데읎터 처늬하Ʞ or 메소드에서 나가Ʞ
      • [고꞉프로귞랚] if (잘못되었을 때) → 예왞륌 음부러 발생시킎 → 예왞처늬륌 통핎 에러메섞지 출력하게 만듀Ʞ

9) 데읎터 ì ‘ê·Œ 메소드 ( Getter & Setter  메소드)

Getter 

  • 큎래슀 왞부에서 필드값을 사용할 수 있도록 반환하는 메소드
  • 당, 은닉화 선얞된 필드의 자료형읎 boolean읞 겜우 get 대신 is륌 사용하여 메소드 작성
public 반환형 get필드명() { return 필드명; }

setter 

  • 맀개변수로 값을 전달받아 필드값을 변겜하는 메소드
  • 필요하닀멎 맀개변수에 전달된 값에 대한 검슝도 가능핚
public void set필드명(자료형 맀개변수) { 필드명=맀개변수; }
  • setter메소드에 듀얎가는 필드명에 this ꌭ 붙읎Ʞ
  • this 안랥읎멎? 였류낚
    • 맀개변수에 듀얎옚 값을 닀시 맀개변수에 저장된 ꌎ읎 됚.
    • 싀제로 Setter메서드의 값읎 전달될 때 맀개변수읎늄읎 랔록 낎에 있닀멎 몚두 맀개변수로 읞식핚.
    • 메몚늬의 구조륌 귞늌윌로 ê·žë € this에 대핮 읎핎하Ʞ
  • Getter & Setter 메소드는 자동혞출되Ʞ 위핎 ꌭ 형식에 맞게 작성하Ʞ

 

 

 

 

📌4. 큎래슀의 접귌지정자 섀정하Ʞ

  • 큎래슀륌 ì„ ì–ží•  때 필드 또는 메소드에 접귌지정자륌 선얞하여 ì ‘ê·Œ 가능 유묎 섀정

🔐접귌지정자(Access Modifier)

  • 큎래슀, 필드, 생성자, 메소드륌 ì„ ì–ží•  때 ì ‘ê·Œ 유묎륌 지정하Ʞ 위한 킀워드
  • 왞부에서 접귌할 수 있는 레벚
  • ì ‘ê·Œ 킀워드(keyword)

🔏 priavte - 같은 큎래슀 낎부에서만 ì ‘ê·Œ 가능

  • (큎래슀 왞부에서는 절대 ì ‘ê·Œ 불가능)
  • 필드와 메소드에 사용 가능한 접귌제한자 - 은닉화
  • 가장 제한적읞 ì ‘ê·Œ 지정자 , 넌 귞냥 여Ʞ에 못듀얎와!!!!
  • [음반적윌로] 필드 ì„ ì–ž 시 필드륌 은닉화처늬(Data Hiding)할 때 사용핚
  • 왜? 필드에 잘못된 값을 직접 저장하멎 메소드륌 아묎늬 잘 선얞핎도 잘못된 결곌값읎 나였므로 객첎로 필드에 직접적읞 접귌하는 것을 찚닚하Ʞ 위핎
  • 음반적윌로 Getter&Setter 메소드로 값 섀정할 수 있도록 만듩

🔓 public - 몚든 팚킀지 ì ‘ê·Œ 가능

  • 큎래슀 ,필드 , 메소드에 사용 가능한 접귌제한자
  • 몚든 팚킀지의 큎래슀에서 ì ‘ê·Œ 가능
  • 가장 범용적읞 ì ‘ê·Œ 지정자
  • [음반적윌로] 메소드 ì„ ì–ž 시 사용
    • 프로귞랚 작성에 필요한 몚든 큎래슀에서 접귌할 수 있도록 사용
    • 만앜 public을 쓰지 않윌멎 닀륞 팚킀지에서 메소드사용 못핚
    • 묌론 필드륌 public윌로 만드는 겜우 있ꞎ 하지만 많지는 않음
  • 특별한 겜우는 [필드 - public] [메소드- private]로도 사용핚

🔏protected - 같은팚킀지 및 자식큎래슀만 ì ‘ê·Œ 가능

  • 필드 , 메소드에 사용 가능한 접귌제한자
  • 같은 팚킀지의 큎래슀에서 ì ‘ê·Œ 가능하도록 섀정
  • 닀륞 팚킀지의 큎래슀에서 접귌할 겜우 에러 발생되지만, 상속을 사용하멎 ì ‘ê·Œ 가능

🔏 package(default) - 같은 팚킀지끌늬만 ì ‘ê·Œ 가능

  • 큎래슀 , 필드 , 메소드 에 사용 가능한 접귌제한자
  • 닀륞팚킀지 낮 상속받은 큎래슀여도 절대 ì ‘ê·Œ 불가능!!!!

 

 

 

 

😭 5. 완전한 큎래슀륌 만듀Ʞ 얎렀욎 추상화(Abstract)와 캡슐화(Encapsulation)

  • 추상화륌 통핎 좀 더 견고하게 만드는 작업읎 캡슐화읎닀.
  • 읎 둘(추상화와 캡슐화)을 읎용하여 큎래슀륌 만듀얎 낮는 것읎 원래 정석읎닀.
  • 하지만 현업에서는 추상화와 캡슐화륌 통핎 완전한 형태의 큎래슀륌 쓰는 겜우가 드묌고 펞법을 쓰는 겜우가 ë§Žë‹€.
  • 낎가 원하는 대상을 하나의 큎래슀 낎에 추상화 & 캡슐화로 잘 표현핎죌는 것읎 원칙읎지만, 싀제로는 여러개의 큎래슀로 나누얎 작성하는 겜우가 더 ë§Žë‹€.
  • 슉, 추상화와 캡슐화륌 적용핎서 완전한 프로귞랚을 만드는 음은 얎렀욎 음읎닀.

 

반응형