☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE13 필드, 생성자, 메소드

조반짝 2023. 8. 23. 18:15
728x90
반응형

Field 필드

정해져있지 않는 값을 표현 , 값들을 담는 공간

변수(전역변수 웹을 닫으면 사라지게 됨)와 비슷하지만 {} 안에서 선언하면 언제든지 필요하면 일괄적으로 사용 가능함 

필드는 보통 명사이다.

 

 

Car 클래스 만들기

CarExample 실행클래스에 car 클래스 인스턴스

package chapter06.sec02.exam01;

//Car 클래스를 활용하는 CarExample 실행 클래스를 소스코딩합니다.
public class CarExample {

	public static void main(String[] args) {
		
		// Car 클래스 타입의 객체 생성
		Car myCar = new Car();
		
		// Car 클래스의 필드값 읽기
		System.out.println("Car 제조 회사 = " + myCar.company);
		System.out.println("Car 모델명 = " + myCar.model);
		System.out.println("Car 색상 = " + myCar.color);
		System.out.println("Car 최고 속도 = " + myCar.maxSpeed);
		System.out.println("Car 현재 속도 = " + myCar.speed);
		
		// Car 클래스의  필드값 변경
		myCar.speed = 60;
		System.out.println("Car 수정된 속도 = " + myCar.speed);
		
		// Car 클래스 타입의 인스턴스 객체(yourCar) 생성
		Car yourCar = new Car();
		
		// Car 클래스의 필드값 읽기
		System.out.println("Car 제조 회사 = " + myCar.speed);
		//일관성있는 코딩, 재사용성, 규격화된 표현가능
	}
}

 


Field Init Value 필드 자동 초기화

실행클래스 생성 후 클래스 불러오기

package chapter06.sec02.exam02;

// 앞서, 필드 자동 초기화를 확인하기 위해 생성했던, FieldInitValue 클래스를 활용하여
// 각각의 선언된 필드의 자동 초기화 값을 확인하기 위한
// FieldInitValueExample 실행 클래스를 소스코딩 합니다.
public class FieldInitValueExample {

	public static void main(String[] args) {
		
		// FieldInitValue 타입의 fiv 객체 참조 변수를 선언하고,
		// FieldInitValue() 생성자로 초기화 처리해줍니다.
		FieldInitValue fiv = new FieldInitValue();
		
		System.out.println("byteField의 자동 초기화 값 = " + fiv.byteField);
		System.out.println("shortField의 자동 초기화 값 = " + fiv.shortField);
		System.out.println("intField의 자동 초기화 값 = " + fiv.intField);
		System.out.println("longField의 자동 초기화 값 = " + fiv.longField);
		System.out.println("booleanField의 자동 초기화 값 = " + fiv.booleanField);
		System.out.println("floatField의 자동 초기화 값 = " + fiv.floatField);
		System.out.println("doubleField의 자동 초기화 값 = " + fiv.doubleField);
		System.out.println("arrField의 자동 초기화 값 = " + fiv.arrField);
		System.out.println("referenceField의 자동 초기화 값 = " + fiv.referenceField);
	}
}

 


생성자

생성자를 먼저 만들고 생성자가 필드, 메소드를 가진다. 

초기화가 되어야 객체가  생성된다.


기본생성자 (default constructor) 가 숨겨져 있는데 ctrl + spacebar 를 눌러 보이게 할 수 있다.

package chapter06.sec03.exam01;

// 생성자(Constructor) 이해를 위한 Car 클래스를 선언한다.
public class Car {

	public Car() {
		
		// 생성자 
		System.out.println("Default Car 생성자가 실행됩니다!"); //실행 파일에서 작동된다.
		
		String model1 = "장나라 자동차!";
		System.out.println(model1 + "의 기본 생성자입니다");
		
	}
	String model1 = "소나타";
}

실행 클래스 생성

package chapter06.sec03.exam01;

// 생성자(Constructor) 이해를 위해, CarExample 실행 클래스를 생성해줍니다.
public class CarExample {
	
	public static void main(String[] args) {
		
		System.out.println("main() 함수가 실행되었습니다!");
		
		Car jangnaraCar = new Car();
		System.out.println("장나라 님의 모델명 =" + jangnaraCar.model1);
		
	}
	
}

 


매개변수 넣기

생성자 매개변수(Constructor Parameters):
생성자 매개변수는 생성자를 호출할 때 전달하는 값들을 의미합니다. 

클래스의 생성자는 객체가 생성될 때 초기 상태를 설정하는 역할을 합니다. 

이 초기 상태를 설정할 때 생성자 매개변수를 사용하여 외부에서 값을 받아와 객체의 속성을 초기화합니다. 생성자 매개변수를 사용함으로써 객체 생성 시 필요한 정보를 클래스 내부로 전달할 수 있습니다.

매개변수 : 메소드 바로 뒤에 사용하는 것, () 

 

numbering()안에 int limit이라는 가변적인 요소매개변수(parameter)를 넣어 

밑에 메인 메서드에서 numbering()을 호출할 때 괄호안에 입력값으로 인자(argument) 호출하면 매개변수를 거쳐 limit값이 적용되고 그에 맞는 값이 호출된다.

 

밑에 예제처럼 인자를 여러개 사용할 수 있다.

매개변수가 없다면

매개 변수 넣기

 

package chapter06.sec03.exam01;

import java.util.Scanner;

// 생성자(Constructor) 이해를 위해, CarExample 실행 클래스를 생성해줍니다.
public class CarExample {
	
	public static void main(String[] args) {
		
//		System.out.println("main() 함수가 실행되었습니다!");
		
//		Car jangnaraCar = new Car();
//		System.out.println("장나라 님의 모델명 =" + jangnaraCar.model1);
		
		//매개변수 X
//		Car myCar = new Car();
//		System.out.println("myCar의 색상 = " + myCar.color); // myCar의 색상 = 검정
//		System.out.println("myCar의 cc = " + myCar.cc); // myCar의 cc = 3000
//		
//	}
		
		Scanner scan = new Scanner(System.in);
		System.out.println("myCar의 색상을 입력해주세요 ==>");
		String myCar_color = scan.next();
		System.out.println("myCar의 cc를 입력해주세요 ==>");
		int myCar_cc = scan.nextInt();
		
		
		//매개변수
		Car myCar = new Car(myCar_color, myCar_cc);
		System.out.println("myCar의 색상 = " + myCar.color); // myCar 색상 = 검정
		System.out.println("myCar의 cc = " + myCar.cc); // myCar의 cc = 3000
		
//		Car 클래스에 Car() 생성자가 명시적으로 없을 경우에는 기본 생성자를 호출할 수없음
//		Car yourCar = new Car(); // Car() 
		
		// 매개변수가 있는 Car 생성자가 있는 상황에서
		// Car 클래스에 Car() 생성자가 명시적으로 있을 경우에는 가능함
		Car yourCar = new Car(); 
	}
}
package chapter06.sec03.exam01;

// 생성자(Constructor) 이해를 위한 Car 클래스를 선언한다.
public class Car {

//	public Car() {
//		
//		// 생성자 
//		System.out.println("Default Car 생성자가 실행됩니다!"); //실행 파일에서 작동된다.
//		
//		String model1 = "장나라 자동차!";
//		System.out.println(model1 + "의 기본 생성자입니다");
		
//	}
//	String model1 = "소나타";
	
//	Car 클래스의 color 필드와 cc 필드를 선언합니다.
	String color;
	int cc;
	
	public Car() {
	}
	
//	매개변수 String 타입의 color와 매개변수 int 타입의 cc를 갖는
//	 Car 생성자를 선언합니다.
	public Car(String color, int cc) {
		this.color = color;
		this.cc = cc;
	}
	
	
	//매개변수가 없다면
//	String color = "검정";
//	int cc = 3000;

	
}

생성자에서 필드 초기화

필드값을 활용한 생성자 


 

생성자 선언

생성자 오버로딩

오버라이딩과 오버로딩의 차이점은??

쿠키와 세션의 차이는?

post방식과 get방식의 차이점은?

 

생성자 오버로딩(Constructor Overloading):
생성자 오버로딩은 하나의 클래스 내에 동일한 이름의 생성자를 여러 개 정의하는 것을 의미합니다. 이때 각 생성자는 매개변수의 타입, 개수, 순서가 다르게 정의될 수 있습니다. 생성자 오버로딩을 사용하면 같은 클래스의 객체를 다양한 방식으로 초기화할 수 있습니다. 

예를 들어, 객체의 속성을 다르게 설정하거나 필요한 매개변수만을 받아 초기화할 수 있습니다.

 

● 생성자 오버로딩 : 적재하다라는 뜻, 클래스에서 다양한 방법으로 객체를 생성할 수 있도록 함. 재정의

                                   매개변수를 달리하는 생성자를 여러개 선언하는 것, public, default 상태에서만 가능

주의할 점: 매개변수의 타입과 개수, 선언된 순서가 똑같을 경우 매개 변수이름만 바꾸는 것은 생성자 오버로딩이 아니다. 


생성자의 오버로딩

package chapter06.sec03.exam03;

// 다음 예시는 Car 생성자를 오버로딩 해서 CarExample 실행 클래스에서
// 다양한 방법으로 Car 객체를 생성해서 활용하는 자바 프로그램 소스 코딩입니다.
public class Car {

	// Car 클래스의 필드 (Field) 선언
	// 아래는 String 타입의 company 필드를 선언하고, 현대자동차로 초기화했음
	String company = "현대자동차";
	// 아래는 String 타입의 model 필드를 선언만 했음.
	String model;
	String color;
	String maxSpeed;
	
	// Car 클래스의 기본(Default) 생성자(Constructor) 선언
	public Car() {
	}
	
	// Source - Generate Constructor Using Field... 클릭해서 필요한 필드 선택 생성함
	public Car(String model) {
		super();
		this.model = model;
	}

	public Car(String model, String color) {
		super();
		this.model = model;
		this.color = color;
	}

	public Car(String model, String color, String maxSpeed) {
		super();
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
}

객체 생성시 생성자 선택

 

package chapter06.sec03.exam03;

// 객체 생성시 생성자(Constructor) 선택 활용 CarExample 실행 클래스를 소스코딩합니다.
public class CarExample {

	public static void main(String[] args) {
	
		Car car1 = new Car();
		System.out.println("car1.company = " + car1.company);
		System.out.println("=========================");
		
		Car car2 = new Car("자가용");
		System.out.println("car2.company = " + car2.company);
		System.out.println("car2.model = " + car2.model);
		System.out.println("=========================");

		Car car3 = new Car("자가용", "붉은색");
		System.out.println("car3.company = " + car3.company);
		System.out.println("car3.model = " + car3.model);
		System.out.println("car3.color = " + car3.color);
		System.out.println("=========================");
		
		Car car4 = new Car("택시", "검정색", 200);
		System.out.println("car4.company = " + car4.company);
		System.out.println("car4.model = " + car4.model);
		System.out.println("car4.color = " + car4.color);
		System.out.println("car4.speed = " + car4.maxSpeed);
		System.out.println("=========================");
		
	}

}

 

this() : 객체 자신을 참조한다. 객체자신을 this 라 칭한다.

 


// this() 활용 다른 생성자를 호출해서 중복코드 줄이는 자바 프로그램 소스코딩

 

package chapter06.sec03.exam04;

// this() 활용 다른 생성자를 호출해서 중복코드 줄이는 자바 프로그램 소스코딩을 합니다.
public class Car {
	
	// Car 클래스의 필드(Field) 선언
	String company = "현대자동차";
	String model;
	String color;
	int maxSpeed;
	
	// Car 클래스의 생성자(Constructor) 선언
	public Car() {
	}

	public Car(String model) {
		this(model, "은색", 250);
	}

	public Car(String model, String color) {
		this(model, color, 250);
	}

	public Car(String model, String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
}
package chapter06.sec03.exam04;


// 객체 생성시 생성자(Constructor) 선택 활용 CarExample 실행 클래스 소스코딩입니다.
public class CarExample {

	public static void main(String[] args) {

		Car car1 = new Car();
		System.out.println("car1.company = " + car1.company);
		System.out.println("=========================");
		
		Car car2 = new Car("자가용");
		System.out.println("car2.company = " + car2.company);
		System.out.println("car2.model = " + car2.model);
		System.out.println("=========================");

		Car car3 = new Car("자가용", "붉은색");
		System.out.println("car3.company = " + car3.company);
		System.out.println("car3.model = " + car3.model);
		System.out.println("car3.color = " + car3.color);
		System.out.println("=========================");
		
		Car car4 = new Car("택시", "검정색", 200);
		System.out.println("car4.company = " + car4.company);
		System.out.println("car4.model = " + car4.model);
		System.out.println("car4.color = " + car4.color);
		System.out.println("car4.speed = " + car4.maxSpeed);
		System.out.println("=========================");
		
	}

}

 


메소드 Method

= 함수 fuction

Method Signature: 메소드 선언부 

출처: 생활코딩

메소드 선언 : (리턴타입, 메소드 이름, 매개변수 선언 )와 실행블록으로 구성된다.

메소드 이름

º 숫자로 시작하면 안된다. $ _ 를 제외한 특수문자를 사용하지 않는다.

º method, package 는 소문자로 작성

º 서로 다른단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성(camel line)

 

 

 

메소드를 numbering()으로 정의를 해서 메인 메서드 안에서 numbering()을 호출 할 수 있다.


Main

main 메서드는 규칙이다.  자바와 개발자사이에 있는 약속이다. public static void main (String[] args)가 이끄는 중괄호 안에 실행 되기를 기대하는 로직을 위치시켜야한다.


메소드의 이점

메서드는 이미 정의해 놓은 로직을 재활용할 수 있고, 코드량이 줄어들고 유지보수에 유리하다.


 

메소드 선언 Calculator

●void : return 타입이 필요없다.

return: 함수를 호출한 곳으로 결과값을 도출하는 역할

디버그 : f6 > f5 를 누르면 calculator 클래스로 이동한다.

x= 5, y =6 이 들어가 있는것을 볼 수 있다.

plus() returned 에 11 값이 나왔다.

 

divide method

동작원리

package chapter06.sec04.exam01;

// 계산기 기능을 갖고 있는 Calcultor 클래스를 선언합니다.
// 그리고, 메소드(Method : 수단, 방법) 선언을 해서 활용합니다.
public class Calculator {
	
	String company = "삼성전자"; // field도 들어갈 수 있다(명사)
	

	// return문이 필요 없는 void 형식의 powerOn() 메서드 선언
	void powerOn() {
		System.out.println(company + " 계산기의 전원을 켭니다!");
	}
	
	// return문이 있는 형식의 plus() 메서드 선언
		int plus(int x, int y) {
			int result = x + y ;
			return result;
			
			// int = return 형식을 맞춰줘야한다.
			// 메소드는 수단과 방법이기 때문에 필요할 때 쓸 수 있게 만들어놓음.
	}
		int minus(int x, int y) {
			int result = x - y ;
			return result;
		}
		
		double mutiple(int x, int y) {
			double result = (double) x * (double) y;
			return result;
		}
		
		double divide(int x, int y) {
			double result =(double) x / (double) y;
			return result;
		}
		void powerOff() {
			System.out.println("전원을 끕니다!");
		}
}
package chapter06.sec04.exam01;

// 앞서 생성했던 Calculator 클래스를 활용하는
// CalculatorExample 실행 클래스를 소스 코딩합니다
public class CalculatorExample {
	
	public static void main(String[] args) {
		
		Calculator myCalc = new Calculator();
		myCalc.powerOn();
		
		int result1 =myCalc.plus(5, 6); //괄호안에 인수를 넣는다.
		System.out.println("result1 = " + result1); // result1 = 11
		
		byte x = 10; // byte 는 int가 커버할 수 있기 때문에 자동형변환이 되서 오류 x
		byte y = 4;
		double result2 = myCalc.divide(x, y);
		System.out.println( "result2 = " + result2);
		
		myCalc.powerOff();
	}
}

special calculator

 

package chapter06.sec04.exam01;

public class SpecialCalculatorExample {

	public static void main(String[] args) {
		
		Calculator yourCalc = new Calculator();
		yourCalc.powerOn();
		
		int result1 = yourCalc.plus(8, 7);
		System.out.println("result1 = " + result1);
		
		int result2 = yourCalc.minus(8, 7);
		System.out.println("result2 = " + result2);
		
		double result3 = yourCalc.mutiple(8, 7);
		System.out.println("result3 = " + result3);
		
		double result4 = yourCalc.divide(8, 7);
		System.out.println("result4 = " + result4);
		
		yourCalc.powerOff();
	}
}

심화) 입력값으로 실행하기

package chapter06.sec04.exam01;

import java.util.Scanner;

public class SpecialCalculatorExample {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		System.out.print("계산을 희망하는 첫번쨰 정수를 입력해주세요==>");
		int num1 = scan.nextInt();
		System.out.print("계산을 희망하는 두번쨰 정수를 입력해주세요==>");
		int num2 = scan.nextInt();
		
		Calculator yourCalc = new Calculator();
		yourCalc.powerOn();
		
		int result1 = yourCalc.plus(num1, num2);
		System.out.println("result1 = " + result1);
		
		int result2 = yourCalc.minus(num1, num2);
		System.out.println("result2 = " + result2);
		
		double result3 = yourCalc.mutiple(num1, num2);
		System.out.println("result3 = " + result3);
		
		
		double result4 = yourCalc.divide(8, 7);
		System.out.println("result4 = " + result4);
		
		yourCalc.powerOff();
	}
}

 


매개 변수 개수를 모를 경우

int sum1(int [ ] values) { }

...를 사용해서 선언하게 되면 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용된다.


매개 변수 (Parameter)의 개수를 모를 경우 매개변수에 배열 [] 또는 ... 을 활용하여 처리하는 예시

 

매개변수가 int[] values 를 넣어 매번 변수를 변경할 필요가 없다.

 

package chapter06.sec04.exam02;

//매개 변수 (Parameter)의 개수를 모를 경우
//매개변수에 배열 [] 또는 ... 을 활용하여 처리하는 예시입니다.
// 실행 클래스인 ComputerExample 클래스를 소스코딩합니다.
public class ComputerExample {
	
	public static void main(String[] args) {
		
		Computer myCom = new Computer();
		
		int[] values1 = {1,2,3};
		int result1 = myCom.sum1(values1);
		System.out.println("result1 = " + result1);

		int[] values2 = {1,2,3,4};
		int result2 = myCom.sum1(values2);
		System.out.println("result1 = " + result2);
		
		int result3 = myCom.sum1(new int[] {1, 2, 3, 4, 5});
		System.out.println("result3 = " + result3);

		int result4 = myCom.sum1(new int[] {1, 2, 3, 4, 5, 6});
		System.out.println("result4 = " + result4);
	}
}

 


return 문

메인 메서드에 numbering(1,5)라는 인자를 입력하면 numbering()에서 1, 5 의 인자값이 int init, int limit에 담긴다.

string output의 변수가 "" 라는 빈 문자열로 정의가 되어있다.

output += i;  ( = output = output + i ;)

return 은 값을 종출력값을 메서드 외부로 반환하면서 종료시킨다. 

그래서 main 메서드의 result 값으로 반환하게된다.

public static String > String 은 rueturn 이 반환하는 값의 데이터 타입은 문자열이라는 뜻이다.

 

 

return을 사용하는 이유?

 

부품으로서의 가치를 높이기 위해서이다. 다양한 용도로 사용 할 수 있기 때문이다.


복수의 리턴

메소드는 여러 개의 입력값을 가질 수 있다. 배열을 이용해여 값을 담아서 리턴한다.

메소드 getMembers가 리턴한 배열을 members 변수에 담았다. 이 변수를 이용해서 여러개의 데이터를 처리할 수 있게 된다.

 


void


return 문 예시

 

package chapter06.sec04.exam03;

// return 문 이해에 활용할 Car 클래스를 선언합니다.
public class Car {

	//필드선언
	int gas;

	
	//생성자(기본 생성자)
//	public Car() {
//	}
	
	//메소드 선언]
	// Source - Generate Getters and Setters ... 클릭해서 활용
	// return 값이 없는 메소드로 매개값을 받아서 gas 필드값을 변경처리합니다.
	public void setGas(int gas) {
		this.gas = gas;
	}
	
	// setGas() 메서드는,위에서 setGas() 메서드로 설정된 gas 필드값을 조회해서 return 처리해주는 메서드
	// setGas() 메서드를 호출한 곳으로 gas 필드값을 return 처리해주는 메서드입니다.
	public int getGas() {
		return gas;
	}


	// 리턴값이 boolean인 메서드로 gas 필드값이 0이면 false를,
	// 0이 아니면 true를 리턴처리하게 합니다.
	boolean isLeftGas() {
		if(gas == 0) {
			System.out.println("gas가 없습니다!");
			return false; // false값을 리턴 처리합니다.
		}
		System.out.println("gas가 있습니다!");
		return true; // true값을 리턴 처리합니다.
	}
	
	void run() {
		while(true) {
			if(gas > 0) {
				System.out.println("달립니다!(gas 잔량 = " + gas + ")");
				gas -=1; //gas = gas -1;
			}else {
				System.out.println("멈춥니다.(gas 잔량 = " + gas + ")");
				return; // 메서드 실행 종료(이 경우에도, return문을 사용할 수 있습니다)
			}
		}
	}
}
package chapter06.sec04.exam03;

// 앞서 생성한 Car 클래스를 활용하는 CarExample 실행 클래스를 소스 코딩합니다.
public class CarExample {

	 public static void main(String[] args) {
		 Car myCar = new Car();
			
			myCar.setGas(5); // Car 클래스 타입의 myCar 인스턴스 객체에 gas량을 5로 설정한다.
			System.out.println("설정된 gas 량 =" + myCar.getGas()); //설정된 gas량 = 5
			
			// Car 클래스에 있는 isLeftGas() 메서드를 호출해서,
			// gas 변수에 있는 잔량(남은 gas량) 을 확인해서 처리를 합니다.
			boolean gasState = myCar.isLeftGas();
			// 만약에(if문) gasState 변수가 true 상태라면,
			if(gasState) {
				System.out.println("출발합니다!");
				// Car 클래스에 있는 run() 메서드를 활용합니다.
				myCar.run();
			}
			if(myCar.isLeftGas()) {
				System.out.println("gas가 존재하기 때문에, 주입할 필요가 없습니다");
			}else {
				System.out.println("gas가 없습니다. 주입해주시기바랍니다.");
			}
	}
	
}

메소드 호출

메서드는 클래스 내외부의 호출에 의해 실행된다.

객체 외부는 클래스를 먼저 생성

 


클래스 내부에서 메소드 호출

 

실행클래스 생성

동작원리

한번 만들어 놓은 클래스는 다른 실행클래스에서 재사용할 수 있다.


클래스 외부에서 메소드 호출

 

클래스생성

실행 클래스 생성


메소드 오버로딩

매개변수의 타입, 개수, 순서 중 하나가 달라야한다는 점

메소드 오버로딩이 필요한 이유는 매개값을 다양하게 받아 처리할 수있도록 하기 위함

 


메소드 오버로딩

 

메서드 오버로딩의 가장 대표적인 예시는 System.out.println()메서드 이다

print의 이름은 같지만 형식을 다양하게 사용할 수 있다.


메소드 오버로딩

 

클래스 생성

실행 클래스 생성

package chapter06.sec04.exam06;



// 메서드 오버로딩 이해를 위해서 앞서 생성한 Calculator 클래스를 활용하는 
// CalculatorExample 실행 클래스를 소스 코딩합니다. 
public class CalculatorExample {

	public static void main(String[] args) {
		
		Calculator myCalc = new Calculator();
		
		//정사각형의 넓이 구하기
		double result1 = myCalc.areaRectangle(10);
		System.out.println("정사각형의 넓이 = " + result1); // 정사각형의 넓이 = 100.0
		
		//직사각형의 넓이 구하기
		double result = myCalc.areaRectagle(10, 20);
		System.out.println("직사각형의 넓이 = " + result);  // 직사각형의 넓이 = 200.0

	}
}
728x90
반응형