안녕하세요! 쏘코입니다.
오늘부터는 서로 연관된 변수와 메소드를 모아서 이름을 붙인 객체를 다뤄보도록 하겠습니다.
그리고 이번 수업 카테고리를 통해 객체를 이용해서 코드의 구조를 세우는 객체 지향 프로그래밍에 대해서 저와 함께 공부하실 수 있을 겁니다 ㅎㅎ (저도 같이 공부하는 학생이니까요!)
목차
0. 남의 클래스 & 남의 인스턴스
새롭게 ProjectOOP라는 프로젝트를 하나 만들어줍니다!
여기에서 이전에 사용했던 클래스들을 다시 한 번 사용해보도록 하겠습니다.
(이미 존재하는 클래스이기 떄문에 남의 클래스이기도 하겠죠!!)
우리가 Math 클래스를 사용한 적이 있었죠?
1회용 작업을 할 때 사용하는 그런 메소드들은 .을 이용해서 쉽게 사용할 수 있습니다.
하지만 작업이 길어지는 경우 new를 이용해서 인스턴스를 만들었던 기억이 나시죠?
FileWriter이라는 클래스의 인스턴스인 f1과 f2를 이용해서 파일을 생성하고 기록하도록 코드를 만들었습니다.
부가적인 부분이긴 한데, f1.close()가 되기 전에는 f1의 메소드인 write를 이용하여 계속해서 파일에 내용을 추가할 수 있습니다.
이 부분을 표현하기 위해서 f1.close()가 맨 뒤로 온 것이죠!
지금까지 만든 코드에서 class는 System, Math, FileWriter이고, instance는 f1, f2가 됩니다.
이 부분은 복습이기 때문에 이해하고 넘어가셔야 합니다!!
++ 만약 코드를 짜고 파일이 생성이 되지 않는다면, ProjectOOP 폴더를 오른쪽 클릭하신 후에 refresh를 하시면 data.txt와 data2.txt파일이 보이실 겁니다!
import java.io.FileWriter;
import java.io.IOException;
public class OthersOOP {
public static void main(String[] args) throws IOException {
// class : System, Math, FileWriter
// instance : f1, f2
// 1회용 작업 : 클래스에 소속된 메소드를 사용
System.out.println(Math.PI);
System.out.println(Math.floor(1.8));
System.out.println(Math.ceil(1.8));
// 긴 맥락을 가진 작업의 경우 클래스를 복제해서 사용
FileWriter f1 = new FileWriter("data.txt"); // data.txt라는 파일에 데이터를 저장하겠다는 상태를 가진 인스턴스가 f1
f1.write("Hello");
f1.write(" Java");
FileWriter f2 = new FileWriter("data2.txt"); // f1과는 다른 복제본 : 데이터는 data2.txt에 저장된다
f2.write("Hello");
f2.write(" Java");
f2.close();
f1.write("!!!");
f1.close();
}
}
1. 변수와 메소드
이번에는 MyOOP라는 클래스를 만들어줍니다.
여기서는 나의 클래스를 이용해보도록 하겠습니다.
아래와 같은 코드가 있다고 생각해봅시다.
반복되는 요소들이 보이면, 메소드화 시켜주고 싶다는 생각이 마구마구 들죠?!
우리가 메소드로 만들어주고 싶은 부분을 블록설정한 후에
오른쪽 단추를 누르고 Refactor > Extract Method...를 누르고 원하는 메소드명을 설정하면?
짜잔! 아래와 같이 편하게 메소드화 시킬 수 있습니다.
물론 수동으로 하나하나 바꿔줘도 상관은 없지만, 이클립스의 기능이니 한 번 사용해보세요 ㅎㅎ
여기서 구분자를 바꿔주고 싶을 수 있을 것입니다.
이런 경우에는 매개변수로 구분자를 받아서 사용할 수 있도록 만들어 주면 더 좋겠죠?!
지금까지 만든 코드는 구분자를 수정해야 한다면 하나하나 수정해야 한다는 단점을 가지고 있습니다.
이럴 때 변수를 하나 만들어서 그 변수를 매개변수로 넣으면
수정해야 하는 일이 생기면 그 변수만 수정하면 되겠죠?
그런데 아직도 매번 printA와 printB 메소드를 불러올 때마다 같은 구분자를 반복해서 매개변수로 넣어야 한다는 것이 좀 귀찮습니다.
그럼 매개변수를 아예 안 쓰도록 만들면 되지 않을까요?!
지금의 delimiter는 main 안에서만 사용할 수 있기 때문에, 밖으로 빼서 같은 클래스의 다른 메소드에서 사용할 수 있도록 만들어줍니다.
그리고 printA , printB 메소드도 매개변수를 받지 않아야겠죠!
현재 delimiter, printA, printB는 깊은 관계가 있죠?
하지만 뒤에 나오는 새로운 메소드나 변수들은 우리가 만든 변수와 메소드와 관계가 없을 수도 있습니다.
이럴 때 필요한 것이 바로 클래스입니다.
public class MyOOP {
public static String delimiter = "";
public static void main(String[] args) {
delimiter = "----";
printA();
printA();
printB();
printB();
delimiter = "****";
printA();
printA();
printB();
printB();
}
public static void printA() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void printB() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
지금까지의 내용은 이전에 공부한 내용에 대한 복습에 가깝습니다.
이제 다음 포스팅부터는 본격적으로 클래스가 필요한 이유에 대해서 알아보도록 하겠습니다!
오늘도 읽어주셔서 감사합니다 😄😄
최근댓글