서로 연관된 코드를 모아서 이름을 붙인 것인 메소드에 대한 수업입니다. 전체수업내용과 소스코드는 아래 주소에 있습니다. opentutorials.... 연관된 다른 수업들과의 관계는 아래 지식 지도를 통해서 찾을 수 있습니다. seomal.org?i=JAVA-method 생활코딩은 일반인에게 프로그래밍을 알려주는 활동입니다. 더 많은 정보를 원하시면 opentutorials.o... 를 방문해주세요.
메소드에게 static은 "클래스의 메소드이냐" / "인스턴스의 메소드이냐" 의 차이를 갖게 해주는 키워드이다. static이 붙은 클래스 메소드는 객체생성 없이 바로 「클래스명.메소드명()」으로 호출할 수 있고, non-static인 인스턴스 메소드들은 객체를 생성함으로써 「인스턴스.메소드명()」으로 호출한다. 오늘도 감사합니다 선생님!
10:50에서 지칭하는 Print는 클래스라고 하시고 a라는 method는 클래스가 아니라 //저 상황에서 Print는 static이 없으니까 instance니까..? 인스턴스의 소속이다, 위의 class Print{ public void a()에서 스태틱이 없기 때문에. 으음 공부 더 열심히 할게요..
10:30 class print{ // public String delimiter;★ //★가 붙는 이 문장과 아래 public static String delimiter;★ 문장 중 하나만 살아있어도 $cc까지 잘 출력되는데 왜 그런 걸까요? public void a() { //인자값은 필요없으니 지워주고 대신에 //static이 없으면 instance소속이다. System.out.println(this.delimiter); //this.가 붙는다. System.out.println("a"); System.out.println("a"); } public void b( ) { System.out.println(delimiter); //?? this. 가 안 붙어도 출력이 됨.. 왜..? System.out.println("b"); System.out.println("b"); } public static String delimiter;★ //static 붙여주고 public static void c(String delimiter) { //static 붙여준다. 왜냐하면 메소드c는 print(라는 클래스)의 메소드이기 때문에 System.out.println(delimiter); //static 이라는 키워드가 붙은 메소드는 클래스의 메소드다. System.out.println("c"); System.out.println("c"); } } public class staticMethod{ public static void main(String[] args) { print t1 = new print(); t1. delimiter = "-"; t1.a(); t1.b(); print t2 = new print(); t2.delimiter = "*"; //instance t2의 delimiter는 "*"이다. t2.a(); //*aa*bb t2.b(); print.c("$"); //$cc출력됨 } }
스태틱이라는 키워드가 붙은 메소드는, 클래스의 메소드다. 스태틱이 없는 메소드는, 인스턴스의 메소드다. void는 리턴값이 없다. delimiter는 구분자라는 뜻이다. 성격이 비슷한 메소드들를 그룹핑하는 도구는 클래스다. 클래스타입 변수 할당 new클래스명()에서 변수는 클래스의 분신이다...근데 new Print할때 클래슨데 '()'가 왜 들어가는걸까요. 나중에 차차 알겠죠? 분신이라고 하는 것은 인스턴스다. 클래스 소속인 메소드가 아닌, 인스턴스 소속으로 메소드를 쓰려면 쓰려는 메소드의 static을 빼야한다. 다시 말해서 메소드가 클래스의 소속으로 쓸때는 쓰려는 메소드에 static이 있어야 한다. 다른 클래스의 static이 빠진 메소드는 클래스의 소속이 아니고, 인스턴스의 소속이 되므로 클래스명.메소드()가 실행되지 않는다. 감동적이지 않으면 자기 손해다. 저는 충분히 감동적이다.
출력값 & c c 이 나오려면 class print{ public static String delimiter2; //static 붙여주고 public static void c(String delimeter2) { //static 붙여준다. 왜냐하면 메소드c는 print(라는 클래스)의 메소드이기 때문에 System.out.println(delimiter2); //static 이라는 키워드가 붙은 메소드는 클래스의 메소드다. System.out.println("c"); System.out.println("c"); } public static void main(String[] args) { print.c("$"); //이거 영상대로 한 건데 왜 $cc가 아니라 nullcc가 출력되는 걸까요? 왜 null이 나오는건지.. print.delimiter2 = "&"; } $도 &도 안되고 null c c 로 출력되는데 왜 그런걸까요?
오타를 수정하여 이름을 같게 해주셔야합니다. public static void c(String delimeter2) { //static 붙여준다. 왜냐하면 메소드c는 print(라는 클래스)의 메소드이기 때문에 => delimeter2 print.delimiter2 = "&"; =>delimiter2 SketchOne이라는 클래스를 생성해서 작성하였습니다. 1. [0]main메소드에서 [1]print클래스로 매개변수("$")를 전달하고 [2]print클래스에서 문자열 delimiter2를 매개변수로써 이용하는 방법 public class SketchOne { public static void main(String[] args) { //[0] print.c("$"); //[1] } } class print{ public static void c(String delimiter2) { System.out.println(delimiter2); //[2] System.out.println("c"); System.out.println("c"); } } 출력 결과 $ c c 2. [0]main메소드에서 [1]print클래스를 인스턴스로 생성하고 [2]그 인스턴스는 내부에 선언된 변수 delimiter2를 "&"라고 정해주고 [3]인스턴스를 실행시키는 방법 public class SketchOne { public static void main(String[] args) { //[0] print t1 = new print(); //[1] t1.delimiter2 = "&"; //[2] t1.c(); //[3] } } class print{ public String delimiter2; public void c() { System.out.println(this.delimiter2); System.out.println("c"); System.out.println("c"); } } 출력결과 & c c