개념 정리 먼저
객체지향 프로그래밍(object oriented programming ) 어떤 대상을 기준으로 코드를 작성
프로그래밍을 단순히 코드의 연속으로 보는 것이 아니라 객체간의 상호작용으로 보는것
코드의 재사용성이 높고 유지보수가 용이하다.
method : 지금까지는 필요한 모든 코드를 메인 메서드에 넣었는데
긴 코드였던 메인메소드에 있는 것들을 나누겠다.
장점 : 같은 내용이 반복될 떄 사용하기 쉽다.
다른 메소드로 분리하면 : 메인메서드에서는 한줄만 입력하면 다른곳에서 메소드를 불러와서 계속 반복해서 사용이 가능하다.
-> 유지보수가 편리해지는 장점이 있다.
고쳐야 할때 수정을 10개의 모두에 해야하지만 메서드를 분리해놓았다면 그 부분의 메소드만 수정해놓으면 된다.
import 는 : 이 클래스 안에서 다른 클래스를 사용할 때 다른 패키지에 있는 애를 가져오는데 그 패키지가 어디에 있는 지 현재 클래스에게 알려주는것.
-CLASS 를 만들때 cass 예약어 이름을 붙여준다 예약어 이름앞글자는 대문자이다.
- MAIN 메소드가 있는 하나가 하나의 프로그램이었는데 main 메소드가 없는 클래스라는 것은
여기에서 만든 클래스를 다른 main 메소드에서 사용한다는 것.
우선 main 메소드를 만들어보자.
package e_oop;
public class SampleClass {
public static void main(String[] args){
int local = 10 ;
// 지역변수 : 메서드 안에서만 사용하는 변수
//지역변수는 반드시 초기화를 해줘야 사용할 수 있었어
}
int field;
//전역변수 : 클래스 전체 영역에서 사용하는 변수
//초기화하지 않아도 기본값으로 초기화된다.
//기본값
boolean 함수는 false 가 기본값
String 함수는 null이 기본값
나머지는 0 이 기본값
boolean bool = false;
String str = null ;
다른 것들은 0
method : 변수를 가지고 한일
선언방법 : 리턴타입 method명 (파라미터) {
}
-파라미터( 매개변수 ) : 실행에 필요한 정보
-리턴타입(반환타입) : 실행 후 돌려줘야 하는 결과물
{method를 바탕으로 클래스 안에서 어떤 일을 할 것인가 }
- method 를 본격적으로 만들어 보자
void method1 () {
// void 는 얘가 return 하는 값인 리턴이 없어서 정해지지 않은 거라서 void으로 써준거고
타입대신 void 타입으로 써준거다 void 나 다른 타입들의 뜻은 돌려주는 리턴타입의 타입을 가리킨다.
// method1 은 내가 지정한 이름이다.
// () 안에는 입력해줄 파라미터값이 들어간다
System.out.println("파라미터도 리턴타입도 없는 method " ) ;
//method1 이라는 애를 다른곳에서 호출을 하면 파라미터도 return 값도 없기에 그 뒤에 있는 괄호 안에 있는 애들이 실행이 된다.
}
String method2(int parameter) {
return parameter + "를 받아 명령을 수행하고 결과물을 리턴하는 메서드"
}
//String 이라는 것은 메소드가 다른 곳에서 호출이 되었을때 나오는 결과값이 String 이라는 뜻
return 뒤에 있는 parameter + "를 받아 명령을 수행하고 결과물을 리턴하는 메서드" 얘는 다른곳에서 method2를 호출하면 결과값인 애들이다 ( 출력 표시 System~ 이 없기 때문에 출력이 되지는 않는다.
parameter 란 : method를 선언해주는 입장에서는 타입에 맞는(int) 데이터 (parameter) 를
선언해서 그 것만 넣어주세요를 알려주는게 ( int parameter)
return : method를 종료시키면서, 리턴할 데이터가 있다면 데이터를 돌려줌
보통은 가장 마지막줄에 위치하게 됨.
이제 클래스를 만들어주었고 이것은 다른곳에 저장되어 있으니까 내가 짜던 코드창으로 돌아가서 위에서 만들어진 애를 사용을 해보는거야
--> 내가 짜고 있던 코드창으로가서
객체를 생성해주어야 한다.
SampleClass sc = new SampleClass() ;
// sc 는 임의로 만들어진 변수가 되고 이것의 타입이 SampleClass가 되는것이다. ( 이거는 연결된 그 다른 클래스의 이름.) 이렇게 객체를 생성해 주면 연결이 되서 내가 만들었던 class가 지금 main 과 연결이 되서
사용을 할 수 있게 되는 준비가 된다.
그것을 확인해보기 위해서
System.out.prinln(sc.field) ; 를 입력해보면 내가 만든 class 에서의 field 의 변수가 잘 출력이 되는지 알 수 있다.
값이 위에서 지정한 0이 출력하게 된다.
sc.method1 () ;
-> 파라미터도 리턴타입도 없는 메서드라는 내용이 출력됨
-> 메소드에 있는 내용을 처음부터 끝까지 실행된다.
변수. 만들어진 메소드이름 () -> 이렇게 하면 메소드를 호출할 수 있게 된다.
sc.method2(5)
int 타입의 값인 5를 파라미터에 넣었고 얻을 수 잇는 것은 스트링타입의
String returnValue = sc.method2(5) ;
System.out.println(returnValue) ;
출력 : 5를 받아 명령을 수행하고 결과물을 리턴하는 메서드
System.out.println(sc.method2(10) ) 변수에 담지 않고 그냥 사용하고 싶으면 이렇게 사용하면 됨 넣으면 됨
-----------------------------------------------------------------------------------------------------다른 예시 하나더
sc.flowtest1() ;
방금 만든 클래스의 객체를 생성하고 변수에 저장해주세요
ClassMaker sn = new ClassMaker();
// 객체가 저장된 변수를 통해 메서드를 호출해 주세요
sn.method1() ;
//피라미터가 있는 메서드 타입에 맞는 값을 넘겨주시고
int answer = sn.method2()
System.out.println(answer) ;
sn.method3("sk" )
//리턴타입이 있는 메서드는 리턴받은 값을 출력해주세요.
sn.method4(4, 5);
System.out.println(sn.method4(4, 5) ) ;
// 선생님이 내준 수업중에 과제
1. 전역 변수 하나를 선언 및 초기화 해주세요
int a = 2 ;
2. 리턴타입과 피라미터가 없는 메서드 하나를 만들어 주세요
메소드 안에서 전역변수를 출력해주세요
void method1 () {
System.out.println(a);
}
-> return 타입이 없으니까 void
3. 전역변수와 동일한 타입의 리턴타입이 있고 피라미터는 없는 메소드 하나를 만들어주세요 , 메소드 안에서 전역변수를 리턴해 주세요.
int method2(){
return a;
}
4. 리턴타입은 없고 void 파라미터가 있는 메소드 하나를 만들어주세요 메서드 안에서 피라미터를 출력해주세요
void method3 (String p ) {
System.out.println(); ?
}
5. int 타입의 리턴타입과 int 타입의 피라미터 두개가 있는 메서드 하나를 만들어 주세요
메서드 안에서 두 파라미터를 곱한 결과를 리턴해 주세요
int method4(int p , int h){
return p*h ;
}
}
- 계산기 만들기
double sum ( double a, double b ) {
return a + b ;
}
double multi ( double a , double b ) {
return a * b ;
}
double divi(double a , double b ) {
return a / b ;
}
double min(double a , double b ) {
return a-b ;
}
double remin(double a, double b ) {
return a % b ;
}
}
---------------------------> 계산기 만든거를 main 메소드에서 사용해보자
Calculator sm = new Calculator () ; 객체를 만든것
수정답
double answer1 = sm.sum(123456, 654321);
System.out.println(answer1);
double answer2 = sm.multi(answe1, 123456) ;
System.out.println(answer2);
double answer3 = sm.divi(answer2, 123456) ;
System.out.println(answer3) ;
double answer4 = sm.min(answer3, 654321) ;
System.out.println(answer4) ;
double answer5 = sm.remin(answer4, 123456) ;
System.out.println(answer5) ;
선생님 답 . 간결함
double result = sm.sum(123456,654321) ;
result = sm.multi(result , 123456) ;
result = sm.divi(result, 123456) ;
result = sm.min(result, 654321) ;
result = sm.remin(result, 123456) ;
System.out.println(result) ;
// -> oop 로 가서
void flowtest1(){
System.out.println("flowTest 시작 : 1 "); //1
flowTest3();
System.out.println("flowTest1 종료 : 6 "); //6
}
void flowTest2() {
System.out.println("flowTest2 시작 : 3 " ); //3
System.out.println("flowTest2 종료 : 4 "); //4
}
void flowTest3() {
System.out.println("flowTest3 시작 : 2 "); //2
flowTest2();
System.out.println("flowTest3 종료 : 5 "); //5
댓글
댓글 쓰기