SQLD, ECLIPS, JAVA,PYTHON, NODE....

[Eclips] Java class 4 - 선언부, Method, signature, Overloading, windowbuilder 설치. 본문

Java

[Eclips] Java class 4 - 선언부, Method, signature, Overloading, windowbuilder 설치.

D_Aiden 2023. 12. 12. 10:05
728x90
반응형
SMALL

2023.12.12

## 메소드(Method) = 함수.


: 클래스에 포함돼 클래스 안에 있는 데이터를 처리하는 기능임.


1. 정의(생성의 의미)

method 구조

메인 메소드 구성으로는 다음과 같다.

  • public : 모든 클래스에서도 해당 변수나 메서드가 접근이 가능하다는 의미로 프로그램의 시작은 main이기 때문에 다른 곳에서도 호출할 수 있도록 public을 사용
  • static : 자바가 compile이 되는 순간 가장 빠르게 정의되어 별도의 객체 생성 없이 모든 객체와 공유가 가능
  • void : 별도로 return 값 없이 메소드를 실행하고 끝난다는 의미
  • main : 이 메서드가 main 메서드라는 의미
  • string[] args : 연속적인 문자열 데이터가 들어가는 저장 공간. 터미널에서 자바프로그램을 실행할때 인수를 줄수있는데 이 값이 이곳으로 들어오게 된다.
  •  

2. 호출(실행)

- return 결과값을 호출 후, 변수가 사라짐.
- 메소드 실행은 반드시 new 키워드로 생성함
ex1. dd a = new dd():            // new는 heap메모리에 넣어둔다는 의미로 기억하자.

ex2. int res = sum(3,10);  
      int sum (int i, int j) {             // i가 3,  j가 10
           return i+j;
      }
      결과: 13   결과가 나온 후, 제어블럭 벗어나면 사라짐.

return 사용의미: 메서드 종료

(비교1)

(결과)
3가지의 결과: 아무것도 안나옴(리턴 타입이 없으므로..)

## 메소드 시그니처(method signiture)

: 메소드 시그니처가 다르면, 같은 이름의 식별자 정의가 가능.
Java에서 메서드 시그니처는 메서드의 정의에서 메서드 이름과 매개변수 리스트의 조합을 말한다.
메서드 이름과 매개변수 리스트가 중요한 이유는 오버로딩 때문이다.
Java 컴파일러는 메서드 이름과 매개변수 리시트를 통해 메서드간의 차이를 식별한다.

ex)
public void dda(int x, int y) {
...
}
public void dda(double a, int v, double z) {
...
}
(해설) dda라는 이름의 두 메서드를 오버로딩하여 정의한 것을 보여준다.
메서드 시그니처는 각각 dda(int, int), dda(double, int, double)로 메서드 이름은 동일하나 매개변수 리스트가 다름.

## 메소드 오버로딩(method Overloading)

: 메소드 시그니처가 같으면, 같은 이름의 식별자 정의 가능.
: 부모 클래스에게 상속받은 메서드와 동일한 이름의 클래스를 재정의하는 것이며, 부모의 메서드를 자신이 만든 메서드로 덮어 쓰는 개념.

(설명1) 메소드 시그니처, 메소드 오버로드 구분

public static void main(String [ ] args) {         // 메소드 시그니처
      int sum(int i, int j) {
       return i+j;
      }
      void sum(double a, double b, double c) {      //  메소드 오버로드
        System.out.println(a+b+c); 
       }
}

 

(연습1) 주민번호를 입력해 메소드 함수로 성별, 출생지, 나이 반환하는 함수를 생성하시오.
(hint)
1. 달력 호출: Calendar dd = Calendar.getInstancs();
                      int
years = c.get(Calendar.YEAR);
2. 키보드 호출: Scanner scan = new Scanner(System.in);

import java.util.Calendar;
import java.util.Scanner;

public class MethodEx2 {
	public static void main(String[] args) {
		Scanner sca = new Scanner(System.in);
		System.out.print("주민번호를 입력하세요: ");
		String id = sca.nextLine();
		String gender = gender(id);
		System.out.println("성별: " + gender);
		String birth = area(id);
		System.out.println("출신지역: " + birth);
		int age= ages(id);
		System.out.println("나이: "+ age);
	}
// 성별 반환 함수
	public static String gender(String s) {
		char o = s.charAt(7);
		if(o == '1' || o == '3') { 
			return "남자"; 
		} else return "여자";
	}

//출생지 반환 함수
	public static String area(String s) {          // subString(M,N) --> M번째부터 N번째 -1까지
		char area=s.charAt(8);
		switch (area) {
		case '0': return "서울";
		case '1': return "인천";
		case '2': return "경기도";
		case '3': return "강원도";
		case '4': return "충청남도";
		case '5': return "충청북도";
		case '6': return "전라남도";
		case '7': return "전라북도";
		case '8': return "경상도";
		default : return "제주도";
		}
	}
//나이 반환 함수
	public static int ages(String s) {
		String nayiStr = s.substring(0,2);         //substring(시작위치, 끝위치 -1)형태임
		int birthyear=Integer.parseInt(nayiStr);   // String값을 int로 변환하는 함수는 Integer.paseInt 임
		int age=0;		

		Calendar c = Calendar.getInstance();       // new라는 명령을 가진 함수, import java.util.Calendar를 생성.
		int year = c.get(Calendar.YEAR);          // 변수.get(Calendar.YEAR)는 Calendar를 불러오는 함수

		char d= s.charAt(7);
		if(d == '1' || d =='2') {
			age=year-(1900 + birthyear)+1;
		}else {
			age=year-(2000 + birthyear)+1; 
		}
		return age;
	}
}

(결과)

주민번호를 입력하세요: 041201-3114444
성별: 남자
출신지역: 인천
나이: 20

 

(연습2) 1번, 2번, 3번의 주어진 값을 반환하는 함수를 작성하시오.

public class MethodEx1 {
	public static void main(String[] args) {
// 1번
	int res = sum(20, 30);  //1번
	System.out.println(res);
// 2번
	sum(10.1, 20.2, 30.3);
// 3번
	String[] str = new String[3];
	str[0] = "안녕";
	str[1] = "메소드";
	str[2] = "주소를 넘겨주는 메소드";
	stringMethod(str);

	for(int i=0; i<str.length; i++) {       // 배열과 같은 자료구조와 사용되는 for문(향상된 for문)
		for(String s: str) {     	}	    // (String 방1개 구조선언 형태이며, str은 배열명 이름)
			System.out.println(str[i]);
		}
	}
	public static void stringMethod(String[] str) {
	}
// 1번 결과
	public static int sum(int i, int j) {
		return i+j;
	}
// 2번 결과
	public static void sum(double a, double b, double c) {   
		System.out.println(a+b+c);
		return;
	}
// 3번 결과
	public static void strs(String [] s) {       			 // 주소를 s로 받음
		s[0] = "몰라~";
	}
}

(결과)

50
60.599999999999994
안녕
메소드
주소를 넘겨주는 메소드

 

(연습3) null이거나, 문자열이면 false 반환, '0'~'9' 외의 값이면, false 반환하는 코딩 하시오.

public class MethodEx3 {
	public static void main(String[] args) {
		String str ="123";
		System.out.println(str + "는 숫자 인가요? "  + isNumber(str));
		str = "1234 g";
		System.out.println(str + "는 숫자 인가요? " + isNumber(str));
	}
	public static boolean isNumber(String str) { // isnumber는 숫자나 문자를 반환하는 함수		
//null이거나 문자열이면 false 반환
		if(str==null ||str.equals("")) {
			return false;
		} 
//str 문자열에서 문자 하나씩 가져다가 '0'~'9'이외의 값이면 false 반환
		for(int a=0; a<str.length(); a++) {         //배열이 아닐때, length() 사용.
			char dd = str.charAt(1);
			if(dd>= '0' && dd<= '9') {
				continue;
			} else {
				return true;
			}
		}
		return true;
	}
}
// null 표현: null , "" 2종류

(결과)

123는 숫자 인가요? true
1234 g는 숫자 인가요? true

 

## Static 이해하기

: static 키워드로 static에 담아두는...

public class StaticEx1 {
	public static void main(String[] args) {
	
	printChar('*',20);				// *를 20개 출력
	System.out.println("static 키워드 이해하기");
	printChar('$',20); 				// $를 20개 출력
	}
	static void printChar(char ch, int num) {   //printChar로 문자열,숫자 선언하기
		for(int i=1; i<num; i++) {
			System.out.print(ch);
		}
		System.out.println();
	}
}

 

## 외부 클래스

- 외부 클래스는 public 클래스 외부에 추가로 정의한 클래스를 의미.
- Class가 여럿 일 경우 main 위에서 변수를 선언해 사용.

(예제2) 아래의 main에 출력 될 함수값은?

class StaticVerifyTest {
	private static int d=10;
	private int j;
	
	static void test1() {
	//static int k;
	int k=300;
	i=100;
	System.out.println(i);
	}

	void test2() {
	// static int k;
	i=200;
	j=300;
	}
	public static void main(String[] args) {
	System.out.println(i);         // 10 출력됨
	test1();					   // 100 출력됨
	System.out.println(i); 		   // 100 출력됨
	System.out.println(k);         // 오류
	test2();					   // 오류
	System.out.println(i);		   // 200출력됨
	}

 

##정적 초기화 블럭

- 형식:  static{ }  형태임.  
- 클래스가 사용되기 전에 JVM에 단 한번 호출(실행) - 정적 필드(변수)의 초기화 설정에 주로사용

public class StaticBlock {
	static int[] arr;
	static {
		arr=new int[100];
		for(int i=0; i<arr.length; i++) {
			arr[i]=i+1;
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(StaticBlock.arr[34]);
		System.out.println(StaticBlock.arr[87]);
	}
}

(결과)

35
88



## Windowbuilder 설치

Step1. help > Eclips marketplace 
Step2. find에 windowbuilder를 입력

Step3. 설치 완료 후, Eclips를 restart 하면 실행됨.
Step4. 설치확인 --> new -> others -> select wizard 상에서 windowbuilder 폴더 클릭 ->하위 폴더에 swing Desinger -> 하위 폴더에 Application Window 클릭 
Step5. Package 폴더를 생성 --> class 파일 생성(Exex1) 

Windowbuilder의 사용방법은 추후 업로드

728x90
반응형
LIST