수업

+17 멤버 메소드

hs_developer 2022. 5. 25. 12:47

알아야 할 것

Object

String

StringBuffer

Wrapper

Date

Calendar

StringTokenizer

List

Map

Set

IO

 

 

클래스 구성 요소

1. 변수 :: 속성
2. 메소드 :: 기능, 동작
3. 생성자 :: 변수의 초기화

 

객체 지향 3대 요소

1. 캡슐화 (데이터 보호)
2. 재 사용 (상속, 포함)
3. 다형성 (수정, 추가)

 

 

 


멤버 메소드

 

1. 

 

// void
정렬 전: 
K A C B E 
정렬 후: 
A B C E K 
[A, B, C, E, K]

// return
[A, B, C, E, K]
class Util
{
	// 정렬 후에 출력 :: void
	void sort(char[] c)
	{
		for(int i=0; i<c.length-1; i++)
		{
			for(int j=i+1; j<c.length; j++)
			{
				if(c[i]>c[j])
				{
					char temp=c[i];
					c[i]=c[j];
					c[j]=temp;
				}
			}
		}
		System.out.println("정렬 후: ");
		
		for(char cc:c)
		{
			System.out.print(cc + " ");
		}
		
		System.out.println();
	}
	
	// 정렬 후 결과 값 전송 :: return
	char[] rsort(char[] c)
	{
		for(int i=0; i<c.length-1; i++)
		{
			for(int j=i+1; j<c.length; j++)
			{
				if(c[i]>c[j])
				{
					char temp=c[i];
					c[i]=c[j];
					c[j]=temp;
				}
			}
		}
		
		return c;
	}
	
}


public class 멤버메소드 {

	public static void main(String[] args) {
		
		// void
		Util u = new Util(); // u = sort
		char[] c = {'K', 'A', 'C', 'B', 'E'};
		
		System.out.println("정렬 전: ");
		for(char cc:c)
		{
			System.out.print(cc + " ");
		}
		System.out.println();

		u.sort(c);
		System.out.println(Arrays.toString(c));
		
		
		// return
		char[] cc = u.rsort(c);
		System.out.println(Arrays.toString(cc));
	}

 

 

2. 

 

// 계산기1
첫 번째 정수 입력: 10
두 번째 정수 입력: 3
연산자(+, -, *, /) 입력: +
10+3 = 13

// 계산기2
첫 번째 정수 입력: 5
두 번째 정수 입력: 10
연산자(+, -, *, /) 입력: *
5*10 = 50
class Calc
{
	int plus(int a, int b)
	{
		return a+b;
	}
	int minus(int a, int b)
	{
		return a-b;
	}
	int multiple(int a, int b)
	{
		return a*b;
	}
	String div(int a, int b)
	{
		String result="";
		
		if(b==0) {
			result="0으로 나눌 수 없습니다!";
		}
		else {
			result= a + "/" + b + " = " + (a/b);
		}
		return result;
	}
	
	void equals() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 정수 입력: ");
		int a = sc.nextInt();
		
		System.out.print("두 번째 정수 입력: ");
		int b = sc.nextInt();
		
		System.out.print("연산자(+, -, *, /) 입력: ");
		String strOp = sc.next();
		
		char op = strOp.charAt(0); // char형 변환
		
		if(op=='+')
		{
			System.out.printf("%d+%d = %d\n", a, b, plus(a, b));
		}
		else if(op=='-')
		{
			System.out.printf("%d-%d = %d\n", a, b, minus(a, b));
		}
		else if(op=='*')
		{
			System.out.printf("%d*%d = %d\n", a, b, multiple(a, b));
		}
		else if(op=='/')
		{
			//방법1
			String result = div(a, b);
			System.out.println(result);
			//방법2
			System.out.printf("%s\n", div(a, b));
			//방법3(simplest)
			System.out.println(div(a,b));
		}
		else
		{
			System.out.println("잘못된 연산자입니다.");
		}
			
	}
}
	

public class 자바메소드2 {

	public static void main(String[] args) {
		
		// 메소드 저장해서 출력 방법
		// 계산기 2개
		Calc c1 = new Calc(); // plus, minus, multiple, div, equals
		c1.equals();
		
		Calc c2 = new Calc();
		c2.equals();
		
	}
}

 

 

인스턴스 메소드

 

Hello Java
class A
{
	void display()
	{
		System.out.println("Hello Java");
	}
}
public class 인스턴스메소드 {

	public static void main(String[] args) {
		
		A a = new A();
		
		a.display();
		
	}
}

 

 

 

클래스 응용

페이지 나누기

상세 보기

제목 찾기

 

1. 영화 리스트

 

movie.txt
0.44MB
Movie.java
0.00MB
MovieManager.java
0.00MB

 

MoiveMain.java

ㅡㅡㅡ 영화 메뉴 ㅡㅡㅡ
1. 영화 목록
2. 상세 보기
3. 검색(영화 명)
4. 검색(출연진)
5. 검색(장르)
9. 종료
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
메뉴 선택: 
1
페이지 번호: 
194 // 마지막 페이지라서 8개, 원래는 10개
1931.마다가스카 2
1932.싸움의 기술
1933.아이스케키
1934.워터 디바이너
1935.사울의 아들
1936.열한번째 엄마
1937.쥬라기 월드
1938.니드 포 스피드
import java.util.*;

class NaverMovie
{
	int menu()
	{
		System.out.println("ㅡㅡㅡ 영화 메뉴 ㅡㅡㅡ");
		System.out.println("1. 영화 목록");
		System.out.println("2. 상세 보기");
		System.out.println("3. 검색(영화명)");
		System.out.println("4. 검색(출연진)");
		System.out.println("5. 검색(장르)");
		System.out.println("9. 종료");
		System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("메뉴 선택: ");
		int m = sc.nextInt();
		return m;
		
	}
	
	// 목록 :: 페이지 나누기
	
	// 1. 받아서 main에서 출력하기 :: return 필요
	Movie[] movieList(int page)
	{
		Movie[] movies = new Movie[10];
		
		int j=0; // 10개씩 나누기
		int pageCnt = (page*10)-10;
		
		// 방법1 (10페이지씩 나누기) :: 조건문O
		/*for(int i=0; i<MovieManager.movie.length; i++)
		{
			if(j<10 && i>=pageCnt)
			{
				Movie m = new Movie();
				m.mno = MovieManager.movie[i].mno;
				m.title = MovieManager.movie[i].title;
				
				movies[j] = m; // 10페이지씩만 나누는 거라서 j
				j++;
			}
		}*/
		
		// 방법2 (10페이지씩 나누기) :: 조건문X
		int k=0;
		for(int i=pageCnt; i<pageCnt+10; i++)
		{
			if(page==194 && k>7) // null 부분 삭제
			{
				break;
			}
			Movie m = new Movie();
			m.mno = MovieManager.movie[i].mno;
			m.title = MovieManager.movie[i].title;
			
			movies[k] = m; 
			k++;
		}
		return movies;
	}
	
	
	// 2. 상세 보기
	Movie movieDetail(int mno)
	{
		Movie m = MovieManager.movie[mno-1]; // 영화번호-1 :: 인덱스번호
		return m;
	}
	
	// 3. 찾기 :: 영화 명, 출연진, 장르
	void findTitle(String title) 
	// 개수가 정해지지 않아서 void 사용 권장
	// 그 외 출연진 actor, 장르 genre 매개변수로 사용
	{
		for(Movie m:MovieManager.movie)
		{
			if(m.title.contains(title))
			{
				System.out.println(m.title);
			}
		}
	}
	
	
	// 예매하기, 마이페이지는 File 필요해서 힘듬
	
	void process()
	{
		while(true)
		{
			int m = menu();
			if(m==9)
			{
				System.out.println("프로그램 종료");
				break;
			}
			else if(m==1)
			{
				Scanner sc = new Scanner(System.in);
				
				System.out.println("페이지 번호: ");
				int page = sc.nextInt();
				
				Movie[] movie = movieList(page);
				
				// 받은 데이터 출력
				for(Movie mm:movie)
				{
					if(mm!=null)
					{
						System.out.println(mm.mno + "." + mm.title);
					}
				}
			}
			
			else if(m==2)
			{
				Scanner sc = new Scanner(System.in);
				
				System.out.println("1-1938번 사이의 정수 입력: ");
				int mno = sc.nextInt();
				
				Movie mm = movieDetail(mno);
				System.out.println("ㅡㅡㅡ 상세 보기 ㅡㅡㅡ");
				System.out.println("영화명: " + mm.title);
				System.out.println("감독: " + mm.director);
				System.out.println("출연: " + mm.actor);
				System.out.println("장르: " + mm.genre);
				System.out.println("등급: " + mm.grade);
				System.out.println("개봉일: " + mm.regdate);
			}
			
			else if(m==3)
			{
				Scanner sc = new Scanner(System.in);
				
				System.out.println("검색어 입력: ");
				String ss = sc.next();
				findTitle(ss);
				
			}
			
			
		}
	}
}

public class MovieMain {

	public static void main(String[] args) {
		
		NaverMovie n = new NaverMovie();
		n.process();
	}
}
2. 바로 출력하기 :: void 

void movieList(int page)
{

}

 

 

 

2. 명소 리스트 (이건 숙제)

 

Nature.java
0.00MB
NatureMain.java
0.00MB
NatureManager.java
0.00MB

 

 

 

마지막 페이지 에러 없이 출력하기

 

1
2
3
4
5
6
7
8
class A
{
	int a;
}

public class MainClass {

	public static void main(String[] args) {
		
		A[] alist = new A[10];
		
		for(int i=0; i<8; i++)
		{
			// 방법1
			A aa = new A();
		
			aa.a = i+1;
			alist[i] = aa;
			
			// 방법2
			//alist[i] = new A();
			//alist[i].a = i+1;
			
		}
	
	
	for(A aa:alist)
	{
		if(aa != null) // **마지막 페이지 에러 없애기
		System.out.println(aa.a);
	}
}

 

 

 

배열 개수 지정 시 숫자가 맞아 떨어지지 않으면 에러 발생 해 배열 숫자를 넣지 않는 게 바람직하다. 그래서, 컬렉션 사용이 권장된다.