리턴(return)문

리턴값이 있는 메소드

메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 사용해서 리턴값을 지정해야 함

return문이 없다면 컴파일 에러가 발생함 / return문이 실행되면 메소드는 즉시 종료

return 리턴값;

return문의 리턴값은 리턴 타입이거나 리턴 타입으로 변환될 수 있어야 한다.

int인 plus()메소드에서는 byte, short, int의 값이 리턴되어도 상관 없음 ( 자동 타입 변환 )

자동 타입 변환
int plus( int x, int y ) {
	int result = x + y;
    return result;
}

int plus( int x, int y ) {
	byte result = (byte) (x + y);
    return result;
}

 

return문 이후의 실행문은 결코 실행되지 않음

컴파일 에러
int plus( int x, int y ) {
	int result = x + y;
    return result;
    System.out.println(result); // 컴파일 에러 
}

밑에 같은 경우에는 컴파일 에러 발생하지 않음
		if(gas == 0) {
        System.out.println("gas가 없습니다.");
			return false;
        }
        System.out.println("gas가 있습니다.");
        	return true;

 

리턴값이 없는 메소드 : void

리턴값이 없는 메소드는 리턴 타입으로 void를 사용

void로 선언된 메소드에서도 return문을 사용할 수 있음

이 경우 리턴값을 지정하는 것이 아니라 메소드 실행을 강제 종료

return;

 

	void run() {
		while(true) {
			if(gas > 0) {
				System.out.println("달립니다.(gas잔량 : " + gas +")");
				gas -= 1;
			}else {
				System.out.println("멈춥니다.(gas잔량 : " + gas +")");
				return; // run() 메소드 실행 종료
			}
		}
	}

 

실습 예제

package sec031.exam03;

public class Car {
	// gas 예제안보고 만들어 보기 
	// 선언
	
		int gas;
		int speed;
		
		void keyTurnOn() {
			System.out.println("키를 돌립니다.");
		}
		
		//1. 남은 가스를 체크
		boolean isLeftGas() {
			if(gas > 0) {
				return true;
			}else {
				return false;	
			}
			
		}
		
		//2. 달린다.
		
		void run() {
			while (true) {
				for(int i=0; i<=gas; i++) {
					speed += 10;
					if(gas >= 1) {
						gas -= 1;
						
						System.out.println("달린다.(가스 잔량: " + gas +"  )" );
						System.out.println(speed);
						
					}else {
						System.out.println("멈춘다.");
						System.out.println("가스를 충전해주세요.");
						return;
					}
				}

			}
		}
	}

 

package sec03.exam03;

public class CarEx {
	// gas return 예제
	// 호출
	

	public static void main(String[] args) {
		Car myCar = new Car();
		
		myCar.setGas(5);// Car의 setGas() 메소드 호출
		
		boolean gasState = myCar.isLeftGas();
		if(gasState) {
			System.out.println("출발합니다.");
			myCar.run();
		}
		
		if(myCar.isLeftGas()) {
			System.out.println("gas를 주입할 필요가 없습니다.");
		}else {
			System.out.println("gas를 주입하세요");
		}

	}

}

 

결과

 

 

 

 

메소드 호출

메소드는 클래스 내 . 외부의 호출에 의해 실행 됨

클래스 내부의 다른 메소드에서 호출할 경우 단순한 메소드 이름으로 호출

클래스 외부에서 호출할 경우 우선 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드 호출

 

 

객체 내부에서 호출

메소드가 매개변수를 가지고 있을 때에는 매개변수의 타입과 수에 맞게 매개값을 제공

메소드(매개값, ...);

리턴값이 있는 메소드를 호출하고 리턴값을 받고 싶다면 밑에 처럼 변수를 선언하고 리턴값을 대입

타입 변수 = 메소드(매개값, ...);

 

실습 예제 ( 호출 순서 )

package sec031.exam03;

public class Calculator {
	
	//메서드 호출 순서
	//선언

	int plus(int x, int y) {
		
		int result = x + y;
		System.out.println("plus 실행 후 리턴값 : " + result);
		return result;
	}
	
	double avg(int x , int y) {
		
		double sum = plus(x, y);
		double result = sum /2;
		System.out.println("avg 실행 후 리턴값 : " + result);
		return result;
	}
	
	void execute() {
		System.out.println("execute");
		double result = avg(7, 10);
		println("실행결과: " + result);
	}
	
	void println(String messge) {
		System.out.println("println");
		System.out.println(messge);
	}
		

	

}

 

package sec031.exam03;

public class CalculatorExample {

	public static void main(String[] args) {
		//메서드 호출 순서
		//호출
		
		Calculator mycalc = new Calculator();
		mycalc.execute();

	}

}

실행 순서 확인
execute
plus 실행 후 리턴값 : 17
avg 실행 후 리턴값 : 8.5
println
실행결과: 8.5

 

 

객체 외부에서 호출

외부 클래스에서 메소드를 호출하려면 클래스로부터 객체를 생성해야 함

메소드는 객체에 소속된 멤버이므로 객체가 존재하지 않으면 메소드도 존재하지 않기 때문에

클래스 참조변수 = new 클래스(매개값, ...);

객체가 생성되었다면 참조 변수와 함께 도트(.)연산자를 사용해서 메소드를 호출할 수 있음

참조변수.메소드(매개값, ...); <= 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메소드(매개값, ...); <= 리턴값이 있고, 리턴값을 받고 싶은 경우

 

실습 예제 ( gas, key, speed ) 

선언

package sec031.exam03;

public class Car {
	// gas, key, speed 
	
	
		int gas;
		int speed;
		
		void keyTurnOn() {
			System.out.println("키를 돌립니다.");
		}
		
		//1. 남은 가스를 체크
		boolean isLeftGas() {
			if(gas > 0) {
				return true;
			}else {
				return false;	
			}
			
		}
		
		//2. 달린다.
		
		void run() {
			while (true) {
				for(int i=0; i<=gas; i++) {
					speed += 10;
					if(gas >= 1) {
						gas -= 1;
						
						System.out.println("달린다.(가스 잔량: " + gas +"  )" );
						System.out.println(speed);
						
					}else {
						System.out.println("멈춘다.");
						System.out.println("가스를 충전해주세요.");
						return;
					}
				}

			}
		}
	}

 

호출

package sec031.exam03;

public class CarEx {
	
	// gas, key, speed  
	// 호출

	public static void main(String[] args) {
		Car myCar = new Car();
		
		myCar.keyTurnOn();
		
		myCar.gas = 11;
		
		myCar.isLeftGas();
		if (myCar.isLeftGas()) {
			System.out.println("연료있다.");
			System.out.println("출발합니다.");
			
		}else {
			System.out.println("연료없다.");
			
		}
		
		
		myCar.run();
	}

}

결과

 

 

 

 

메소드 오버로딩

클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 함

하나의 메소드 이름으로 여러 기능을 담는다라고 생각하면 됨

메소드 오버로딩 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함 ( 매개순 )

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

 

실습 예제

선언

package sec031.exam03;

public class Calculator2 {
	// 메서드 오버로딩
	// 선언
	int divide(int x, int y) {
		System.out.println("int");
		return x / y;
	}
	double divide(double x, double y) {
		System.out.println("double");
		return x / y;
	}
}

 

호출

package sec031.exam03;

public class CalEx2 {
	
	// 메서드 오버로딩
		// 호출

	public static void main(String[] args) {
		Calculator2 cal = new Calculator2();
		System.out.println(cal.divide(10, 3));
		
		System.out.println(cal.divide(10, 3.0));
		// 자동 형변환 int => double

	}

}
결과
int
3
double
3.3333333333333335

 

실습 예제 2 ( 사각형 )

선언

package sec03.exam03;

public class Square {
	// 메소드 오버로딩 ( 선언 ) 
	// 정사각형, 직사각형 넓이 
	
	// 정사각형의 넓이
	double square(double width) {
		return width * width;
	}
	
	// 직사각형의 넓이
	double rectangle(double width, double height) {
		return width * height;
	}
}
호출

package sec03.exam03;

public class SquareEx {
	// 메소드 오버로딩 ( 호출 )
	// 정사각형, 직사각형 넓이 
	
	public static void main(String[] args) {
		Square mySquare = new Square();
		
		// 정사각형의 넓이 구하기
		double result1 = mySquare.square(10);
		
		// 직사각형의 넓이 구하기
		double result2 = mySquare.rectangle(10, 20);
		
		// 결과 출력
		System.out.println("정사각형의 넓이 : " + result1);
		System.out.println("직사각형의 넓이 : " + result2);

	}

}
결과
정사각형의 넓이 : 100.0
직사각형의 넓이 : 200.0

 

실습 문제 풀어보기 

login(), logout() 메소드 2개 선언 ( 매개값 id, pw가 true 일 경우에만 true 리턴, 그 외 false )

선언

package sec031.exam03;

public class MemberService {
	//login, logout 메소드 활용 문제
	//선언
	
	String id;
	String pw;
	
	boolean login(String id, String pw) {
		if(id.equals("hong") && pw.equals("12345"))
		{
			
			return true;
		}else {
			System.out.println("id, pw 불일치");
			return false;
	}
	
		
	}
	void logout (String id) {
		System.out.println("로그아웃 되었습니다.");
		
	}
		
		
}
호출

package sec031.exam03;

public class MemberEx {

	public static void main(String[] args) {
		//login, logout 메소드 활용 문제
		//호출
		MemberService memberService = new MemberService();
		boolean result = memberService.login("hong", "12345");
		if(result) {
			System.out.println("로그인 되었습니다.");
			memberService.logout("hong");
		}else {
			System.out.println("id 또는 pw가 올바르지 않습니다.");
		}

	}

}
결과
로그인 되었습니다.
로그아웃 되었습니다.

 

메소드 오버로딩 프린트 문제

선언

package sec031.exam03;

public class Printer {
	// 메소드 오버로딩 문제 
	// 선언
	
	int x;
	
	void println() {
		
	}
	void println(int x) {
		System.out.println(x);
	}
	
	void println(boolean x) {
		System.out.println(x);
	}
	
	void println(double x) {
		System.out.println(x);
	}
	void println(String x) {
		System.out.println(x);
	}
}
호출

package sec031.exam03;

public class PrinterEx {
	// 메소드 오버로딩 문제 
	// 호출
	
	public static void main(String[] args) {
		Printer printer = new Printer();
		printer.println(10);
		printer.println(true);
		printer.println(5.7);
		printer.println("홍길동");
		
		

	}

}
결과
10
true
5.7
홍길동

 

static 정적 멤버 실습

package sec031.exam03;

public class Aaa {
	//static 예제 실습
	
	int a1; // 필드
	static int a2; // 정적(고정형) 필드
	
	void println() {
		System.out.println(a1);
		System.out.println(a2);
	}
	
	static void sprintln() {
		Aaa xx = new Aaa();
		System.out.println(xx.a1);
		//인스턴스 변수 사용불가 
		//사용할라면 객체 생성 필요
		
		System.out.println(a2);
	}
}
package sec031.exam03;

public class Bbb {
	//static 예제 실습
	
		int x = 100;
		
		void println() {
			System.out.println(x);
		}

	public static void main(String[] args) {
		Bbb bbb = new Bbb();
		System.out.println(bbb.x);
		bbb.println();
	}

}

 

우클릭 source => toString(), using 실습

package sec031.exam03;

public class Student {
	//배열생성 toString() 자동
	
	String name;
	int kor;
	int math;
	int eng;

	public Student(String name, int kor, int math, int eng) {
		super();
		this.name = name;
		this.kor = kor;
		this.math = math;
		this.eng = eng;
	}

	@Override // "toString" 메서드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
	public String toString() {
		return "Student [name=" + name + ", kor=" + kor + ", math=" + math + ", eng=" + eng + "]";
	}
	// 배열
	public static void main(String[] args) {
//		String[] arr = {"sdsadad"};
		Student[] arr = new Student[3];
		arr[0] = new Student("a", 12,23,34);
		arr[1] = new Student("b", 56,73,84);
		arr[2] = new Student("c", 89,29,100);
		for(int i=0; i < arr.length; i++)	{
			
			System.out.println(arr[i]);	
		}
		

	}



}
결과
Student [name=a, kor=12, math=23, eng=34]
Student [name=b, kor=56, math=73, eng=84]
Student [name=c, kor=89, math=29, eng=100]

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-06-01 12일차  (0) 2023.06.01
2023-05-31 11일차  (0) 2023.05.31
2023-05-26 9일차  (1) 2023.05.26
2023-05-25 8일차  (0) 2023.05.25
2023-05-24 7일차  (2) 2023.05.24

form

하나의 폼 안에서 여러 구역을 나누어 표시 ( ex)개인정보, 배송정보 ) 

<form>
<fieldset>
<legend>상품 선택</legend>
</fieldset>
<fieldset>
<legend>배송 정보</legend>
</fieldset>
</form>

 

<label>태그는 <input>태그와 같은 폼 요소에 레이블을 붙일 때 사용 ( ex) 아이디, 비밀번호 id, pw

for와 id를 user-id값을 동일하게 해서 폼 요소와 레이블을 연결

form
<label for="user-id">아이디:</label>
<input type="text" id="user-id">
<label for="user-ipw">비밀번호:</label>
<input type="text" id="user-pw">

 

<input> 태그

다양한 폼에서 사용자가 입력한 정보를 받을 때 사용하는 태그

 

 

텍스트와 비밀번호를 나타내는 type="text"와 type="password" 로그인 폼

주로 아이디나 이름, 주소 등 한 줄짜리 일반 텍스트를 입력할 때 사용

속성

size : 텍스트와 비밀번호 필드의 길이를 지정

value : 텍스트 필드 요소가 화면에 표시될 때 텍스트 필드 부분에 보여주는 내용 ( 비밀번호 사용 x )

maxlength : 텍스트 필드와 비밀번호 필드에 입력할 수 있는 최대 문자 수를 지정

 

form
<label for="user-id">아이디:</label>
<input type="text" size="10" id="user-id">
<label for="user-ipw">비밀번호:</label>
<input type="password" size="10" id="user-pw" >
<input type="submit" value="로그인">

배송정보 ( 각각 type에 맞는 값 입력 ) 

 

type = "search" : 웹브라우저 검색을 위한 텍스트 필드로 인식 입력하면 x가 생겨서 입력한 텍스트 모두 지울수 있음

type = "tel" : 모바일에서 이값을 이용해서 바로 전화걸기 가능

type = "email" : email 형식에 안맞으면 오류 메시지 보여줌

type = "url" : 웹주소 

 

 

<fieldset>
<legend>배송 정보</legend>
<ul>
<li>
<label for="user-name">이름</label>
<input type="text" id="user-name">
</li>
<li>
<label for="addr">배송주소</label>
<input type="text" id="addr">
</li>
<li>
<label for="mail">이메일 주소</label>
<input type="email" id="mail">
</li>
<li>
<label for="phont">연락처</label>
<input type="tel" id="phont">
</li>
</ul>
</fieldset>

 

체크 박스와 라디오 버튼을 나타내는 type = "chekbox", type"radio"

 

여러 항목 중에서 원하는 항목을 선택할 때 사용하는 폼요소

항목 1개는 라디오 버튼, 항목 2개 이상 체크 박스

value : 선택한 체크 박스나 라디오 버튼을 서버에게 알려 줄 때 넘겨줄 값을 지정

checked : 여러 항목 중에서 기본으로 선택해 놓고 싶은 항목에 사용

 

<fieldset>
      <legend>상품 선택</legend>
      <p><b>주문할 상품을 선택해 주세요.</b></p>
      <ul>
        <li>
          <label><input type="checkbox" value="s_3" checked>선물용 3kg</label>
          <input type="number">개
        </li>
        <li>
          <label><input type="checkbox" value="s_5">선물용 5kg</label>
          <input type="number">개
        </li>
        <li>
          <label><input type="checkbox" value="f_3">가정용 3kg</label>
          <input type="number">개
        </li>
        <li>
          <label><input type="checkbox" value="f_5">가정용 5kg</label>
          <input type="number">개
        </li>
      </ul>   
      <p><b>포장 선택</b></p>
      <ul>
        <li><label><input type="radio" name="gift" value="yes" >선물 포장</label></li>
        <li><label><input type="radio" name="gift" value="no">선물 포장 안 함</label></li>
      </ul>     
    </fieldset>

 

회원 가입 신청서 만들기

<div id="container">
      <h1>회원 가입을 환영합니다</h1>
      <form>
        <fieldset>
          <legend>사용자 정보</legend>    
          <ul>
            <li>
              <label for="uid">아이디</label>
              <input type="text" id="uid" autofocus placeholder="4자 ~ 10자 사이, 공백없이" required> 
            </li>
            <li>
              <label for="umail">이메일</label>
              <input type="email" id="umail" required> 
            </li>
            <li>
              <label for="pwd1">비밀번호</label>
              <input type="password" id="pwd1" placeholder="문자와 숫자, 특수 기호 포함" required> 
            </li>        
            <li>
              <label for="pw2">비밀번호 확인</label>
              <input type="password" id="pwd2" required> 
            </li>
            <li>
              <label for="path">가입 경로</label>
              <select id="path">
                <option value="blog">블로그</option>
                <option value="search">검색</option>
                <option value="sns">SNS</option>
                <option value="etc">기타</option>
              </select>
            </li>
            <li>
              <label for="memo">메모</label>
              <textarea cols="40" rows="4" placeholder="남길 말씀이 있다면 여기에"></textarea>
            </li>
          </ul>      
        </fieldset>
        <fieldset>
          <legend>이벤트와 새로운 소식</legend>
          <input type="radio" name="mailing" id="mailing_y">
          <label for="mailing_y">메일 수신</label>
          <input type="radio" name="mailing" id="mailing_n" checked>
          <label for="mailing_n">메일 수신 안 함</label>     
        </fieldset>
        <div id="buttons">
          <input type="submit" value="가입하기">
          <input type="reset" value="취소">
        </div>
      </form>
    </div>

autofocus :이 속성은 웹 페이지가 로드될 때 자동으로 해당 입력 요소에 포커스를 설정

placeholder="4자 ~ 10자 사이, 공백없이" : placeholder: 이 속성은 입력 요소에 임시 힌트 또는 예시 값을 제공

required : <input> 태그의 required 속성은 폼 데이터(form data)가 서버로 제출되기 전 반드시 채워져 있어야 하는 입력 필드를 명시

type="reset" : 클릭 시 모든 입력값 지워짐

 

 

스핀 박스, 슬라이드 막대 이용 숫자 입력하기

  form
  <fieldset>
      <legend>상품 선택</legend>
      <p><b>주문할 상품을 선택해 주세요.</b></p>
      <ul>
        <li>
          <label><input type="checkbox" value="s_3">선물용 3kg</label>
          <input type="number" min="0" max="5">개 (최대 5개)
        </li>
        <li>
          <label><input type="checkbox" value="s_5">선물용 5kg</label>
          <input type="number" min="0" max="3" value="1">개 (최대 3개)
        </li>
      </ul>
      <ul>
        <li>
          <label><input type="checkbox" value="f_3">가정용 3kg</label>
          <input type="range" min="0" max="5">개 (최대 5개)
        </li>
        <li>
          <label><input type="checkbox" value="f_5">가정용 5kg</label>
          <input type="range" min="0" max="3" value="1">개 (최대 3개)
        </li>
      </ul>      
      <p><b>포장 선택</b></p>
      <ul>
        <li><label><input type="radio" name="gift" value="yes">선물 포장</label></li>
        <li><label><input type="radio" name="gift" value="no">선물 포장 안 함</label></li>
      </ul>    
    </fieldset>

 

min, max : 최소, 최대값 지정value="1" : 초기값 1로 지정type="range" : 숫자를 입력

 

 

날짜 입력 ( date, month, week ) 

  <form>
    <h1>날짜 지정하기</h1>
    <input type="date">
    <input type="month">
    <input type="week">
    <hr>
    <h1>시간 지정하기</h1>
    <input type="time">
    <input type="datetime-local">
    <hr>
    <h1>범위 제한하기</h1>
    <input type="date" min="2020-02-01" max="2020-02-15">
    <input type="time">
  </form>

 

    <input type="date"> : 달력에서 날짜를 선택해서 입력 가능
    <input type="month"> : 달력에서 월을 선택해서 입력 가능
    <input type="week"> : 달력에서 주를 선택해서 입력 가능 

    <input type="time"> : 폼에서 시간을 입력하게 함
    <input type="datetime-local"> : 사용자가 웹 문서를 보고 있는 지역에 맞는 날짜와 시간을 함께 입력 가능

    <input type="date" min="2020-02-01" max="2020-02-15">

     min = 속성의 범위의 시작 날짜나 시간

     max = 속성의 범위의 마지막 날짜나 시간을 지정

 

 

package superCode;

import java.util.Scanner;

//[문제]
//	택시 기본요금은 10,000원이다.
//	기본 요금으로 10km까지 이동할 수 있다.
//	10km이상 이동 시 추가요금이 발생
//	추가 요금은 3km를 이동할 때마다 2,300원씩 요금이 추가된다.
//	이동거리를 입력 받고 요금을 출력
//
//	예)
//		0~10km => 10,000원
//		11, 12, 13km => 12,300원
//		14, 15, 16km => 14,600원
//	
//	예1) 이동 거리 = 13km
//	[기본요금] + [추가요금]
//	10,000  + (13 - 10) / 3 * 2,300 = 12,300원
//				 3 / 3 = 1 * 2,300 // 3의 배수는 문제가 없음 

//   예1) 이동 거리 = 14km
//   [기본요금] + [추가요금]
//   10,000  + (14 - 10) / 3 * 2,300 = 12,300원
//			       4 / 3 = 1 * 2,300 // 4가 될 경우가 문제 4 / 3 = 1이기때문에 
//				[밑에 처럼 나눈 다음에 +1해서 2로 만들어줄 필요가 있음 ]
//	 10,000  + (14 - 10) / 3 + 1 * 2,300 = 14,600원
//                  4 / 3 = 1 + 1 = 2 * 2,300 



public class TaxiCharge_if_if {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int basicCharge = 10000;//기본 요금
		int basicRoad = 10;// 기본 거리
		
		int plusCharge = 2300;// 추가 요금
		int plusRoad = 3;// 추가 기본 거리
		
		System.out.print("이동할 거리를 입력하세요>");
		int travel = sc.nextInt();// 이동 거리 입력 // ex) 14입력인 경우 false
		
		if(travel <= 0) {
			System.out.println("오류");}
												// ex) false
		if(1 <= travel && travel <= basicRoad) {// 기본 요금일때 경우
			System.out.println("요금은 " + basicCharge + "원입니다.");
		}
		
		if(travel > basicRoad) {// ex) true
			int plusRoad_1 = travel - basicRoad; // ex) 추가이동거리  = 14 - 10 = 4 
			
			int plusCharge_1 = plusRoad_1 / plusRoad;// ex ) 추가요금 = 4 / 3 = 1
			if(plusRoad_1 % plusRoad > 0 ) { //  ex) 4 / 3 = 1 > 0 
				plusCharge_1 = plusCharge_1 + 1;// ex) 2 = 1+1
			}
//							ex)    10,000  + 2 * 2,300
			int totalCharge = basicCharge + plusCharge_1 * plusCharge;
			System.out.println("요금은" + totalCharge + "원 입니다.");
		}
	}

}

 

 

결과

선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;
	    
	    // 생성자
	    public Person(String name, int age) {
	        this.name = name;
	        this.age = age;
	    }

	    // 메서드
	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

생성자

this.name( 인스턴스 변수 ) = name (참조변수)

 => 호출에서 받은 매개변수 값을 참조변수에 저장 후 인스턴스 변수에 저장

 

메서드

sayHello() 메서드 생성

 => name, age는 인스턴스 변수 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
		Person person = new Person("John", 25);
		person.sayHello();  // 출력: 안녕하세요! 저는 John이고, 25살입니다.


	}

}

new Person("John", 25)를 호출하면 Person 클래스의 생성자가 호출되어

name에 "John"을, age에 25를 할당

그 후에 sayHello() 메서드를 호출하여 결과를 출력

 

 

 

생성자 오버로딩

생성자 오버로딩은 하나의 클래스 안에 여러 개의 생성자를 정의하는 것

각각의 생성자는 서로 다른 매개변수 목록을 가지고 있어서 다양한 초기화 방법을 제공

생성자의 이름은 클래스와 동일하며, 매개변수의 개수, 타입, 순서를 다르게 정의

다양한 생성자를 제공하면 객체를 생성할 때 필요한 매개변수에 맞는 생성자를 호출하여 객체를 초기화

 

 

선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;

	    // 매개변수 없는 생성자
	    public Person() {
	        name = "Unknown";
	        age = 0;
	    }

	    // 이름만 받는 생성자
	    public Person(String name) {
	        this.name = name;
	        age = 0;
	    }

	    // 이름과 나이를 받는 생성자
	    public Person(String name, int age) {
	        this.name = name;
	        this.age = age;
	    }

	    // 메서드
	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
	Person person1 = new Person();
	person1.sayHello();  // 출력: 안녕하세요! 저는 Unknown이고, 0살입니다.
	 // 매개변수 없는 생성자 호출

	Person person2 = new Person("John");
	person2.sayHello();  // 출력: 안녕하세요! 저는 John이고, 0살입니다.
	// 이름만 받는 생성자 호출
	
	Person person3 = new Person("Alice", 25);
	person3.sayHello();  // 출력: 안녕하세요! 저는 Alice이고, 25살입니다.
	// 이름과 나이를 받는 생성자 호출
	}
}

 

 

 

다른 생성자 호출 : this()

 

this()는 같은 클래스 내에서 다른 생성자를 호출하는 특별한 문법

this()를 사용하여 다른 생성자를 호출하면,

같은 클래스 내에서 생성자 오버로딩을 활용할 수 있음

this()는 생성자 내에서 첫 번째 문장으로 사용되어야 하며,

해당 생성자의 호출은 객체의 초기화 과정을 간편하게 도와줌

호출된 생성자는 실행되어 해당 인스턴스 변수들을 초기화하게 됨

 

선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;

	    public Person() {
	        this("Unknown"); // 매개변수가 있는 생성자 호출
	    }					 // 마지막 생성자 호출

	    public Person(String name) {
	        this(name, 0); // 두 개의 매개변수를 받는 생성자 호출
	        			   // 마지막 생성자 호출
	    }

	    public Person(String name, int age) { // 마지막 생성자
	        this.name = name; // 공통 실행 코드
	        this.age = age;
	    }

	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
	Person person1 = new Person();
	
	person1.sayHello();  // 출력: 안녕하세요! 저는 Unknown이고, 0살입니다.

	Person person2 = new Person("John");
	person2.sayHello();  // 출력: 안녕하세요! 저는 John이고, 0살입니다.

	Person person3 = new Person("Alice", 25);
	person3.sayHello();  // 출력: 안녕하세요! 저는 Alice이고, 25살입니다.

	}
}

 

 

 

메소드1

 

리턴 타입

리턴값이란 메소드를 실행한 후의 결과값을 말함

메소드는 리턴값이 있을 수도 있고 없을 수도 있다.

리턴값이 있는 메소드

1. 리턴값의 타입을 기술

2. 선언시 매개변수 선언  예)_double divide (int x, int y){...};

3. 호출시 매개변수값과 담을 변수 필요  예)_double result  = divide (10, 20);

4. 호출시 리턴값의 타입이 double 인데 int result  = divide (10, 20);// 컴파일 에러 

5. 4번 같은경우 만약에 자동 타입 변환되는 경우에는 컴파일 에러 안남 

6. 리턴 타입이 있다고 해서 반드시 리턴값을 변수에 저장할 필요는 없음

7. 리턴값이 중요하지 않고 메소드 실행이 중요할 경우에는 divide( 10, 20 ); 호출 가능 

 

리턴값이 없는 메소드( void )

1. 선언시 리턴값이 없는 경우 리턴타입 위치에 void로 기술 예)_void powerOn() {...};

2. 호출시 리턴값이 없기 때문에 변수에 저장할 내용이 없음 예)_powerOn();

 

 

매개 변수 선언

매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용 

리턴값이 있는 경우 매개 변수가 필요하고 리턴값이 없는 경우 매개변수가 필요 없음 

 

// 매개 변수가 있는 메소드 선언 예
double divide ( int x, int y ) {...};

// 호출
double divide ( 10, 20 ); 
//위에 선언할때 2개의 값을 선언했으니 호출할때도 2개의 int값을 주어야 함
// 선언할때 int 값으로 선언했으니 
// 호출시에도 매개값으로 int값이나 int타입으로 변환될 수 있는 값 넘겨주어야함

 

package New_this;

public class PerEx {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;

        printSum(num1, num2); // 메소드 호출
    }

    public static void printSum(int a, int b) { // 매개변수 선언
        int sum = a + b;
        System.out.println("두 수의 합은: " + sum);
    }
}

 

매개 변수의 개수를 모를 경우

매개 변수를 배열 타입으로 선언
//선언
int sum1(int [] values){ }
sum1() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달 가능
배열의 항목 수는 호출할 때 결정하면 됨 

//호출
int[] values = {1, 2, 3};
int result = sum1(values);
int result = sum1(new int[](1,2,3,4,5));

 

package New_this;

public class PerEx {

    public static void main(String[] args) {
    	//선언
        int[] numbers = {1, 2, 3, 4, 5}; // 배열 생성

        printArraySum(numbers); // 배열 인자 전달
    }

    public static void printArraySum(int[] array) { // 배열 타입으로 매개변수 선언
        //호출
    	int sum = 0;
        for (int number : array) {
            sum += number;
        }
        System.out.println("배열 요소들의 합: " + sum); // 배열 요소들의 합: 15

    }
}

 

package superCode;

//[문제]
//	1. 민수네반 학생은 총 26명
//	2. 학생들에게 종이 2장씩 나눠줘야됨
//	3. 종이는 10장씩 한 묶으로만 판매 10장에 가격은 1,200원
//	4. 총 얼마가 필요한지 구하시오
//[정답]
//	7,200원
public class Paper26_if_if {

	public static void main(String[] args) {
		int sudent = 26;// 총 학생수
		
		int paper = 10;// 종이 한묶음
		int paperprice = 1200;// 종이 한묶음 가격 
		
		int studetPaper = sudent * 2;//필요한 종이 개수 / 학생 수 * 2 
		int totalPaper = studetPaper / paper;
		// 필요한 종이묶음 개수 = 필요한 종이 개수 / 종이 한묶음
		
		if(studetPaper % paper > 0) {// 52 % 10 = 2 > 0 비교 true 밑에 실행문 실행
			totalPaper = totalPaper +1; // 0 = 5 + 1 대입 
		}System.out.println("필요한 도화지 묶음 개수 = " + totalPaper);// = 6
		
		int total = totalPaper * paperprice;// 필요한 종이 개수 * 종이 한묶음 가격 
		System.out.println("필요한 금액 : " + total + "원");
	}

}

 

결과

+ Recent posts