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
}
}
'☭DEVELOPER > #2 웹개발(자바기반 풀스택)' 카테고리의 다른 글
[BACKEND]JAVA_ECLIPSE14 인스턴스 멤버와 정적 멤버 (0) | 2023.08.24 |
---|---|
[BACKEND]JAVA_ECLIPSE 코딩테스트 3 (2) | 2023.08.24 |
[BACKEND]JAVA_ECLIPSE12 클래스 (0) | 2023.08.23 |
[BACKEND]JAVA_코딩테스트02 (0) | 2023.08.23 |
[BACKEND]JAVA_ECLIPSE11 열거 (0) | 2023.08.22 |