1.객체지향 프로그래밍 방법론
객체지향 프로그래밍은 방법론이다 이전의 구조적인 프로그래밍 방법론에서 한층더 진화된 방법론입니다.
클래스와 객체 함수들을 사용하는 요소는 같지만 요소를 활용하는 방법에서 구조적인 프로그래밍에서는 함수를 중심으로 구조를 사용했다고하면 객체지향 프로그래밍에서는 객체를 중심에 두고 사용하는 방법을 채택하고 있습니다.
사실 객체지향은 인간의 사고에 가깝기 때문에 우리가 받아들이기가 더 쉽습니다.
일상 생활에서 우리는 객체=실체를 먼저이야기하고 기능은 나중에 이야기하는 경향이 짙습니다.
예를 들자면 커피숍에가서 커피를 주문했다.
커피(주문) 이런식으로 말이죠. 이전의 구조적인 프로그래밍에서는 주문(커피)라는 식으로 사용했습니다.
그래서 인간의 가까운 사고방식으로써 만들어진것이 객체지향 프로그래밍입니다.
import java.util.Random;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
int[] lotto = new int[6];
int menu = inputMenu();
switch(menu) {
case 1:
Lotto.genLottoAuto(lotto);
break;
case 2:
Lotto.genLottoManual(lotto);
break;
default:
}
Lotto.printLotto(lotto);
}
private static int inputMenu() {
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
return x;
}
}
import java.util.Random;
import java.util.Scanner;
public class Lotto {
public static void printLotto(int[] lotto) {
for(int i=0; i<6; i++)
System.out.printf("%d ", lotto[i]);
System.out.println();
}
public static void genLottoManual(int[] lotto) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < lotto.length; i++) {
int num = Integer.parseInt(scanner.next());
lotto[i] = num;
}
}
public static void genLottoAuto(int[] lotto) {
Random rand = new Random();
for(int i=0; i<6; i++)
lotto[i] = rand.nextInt(45)+1;
}
}
예시의 switch문을 보면 Lotto클래스에서 함수를 호출해서 그 매개변수로 객체를 넣어주는 식으로 사용했지만
import java.util.Random;
import java.util.Scanner;
public class Program2 {
public static void main(String[] args) {
final int AUTO = 1;
final int MANUAL = 2;
Lotto lotto = new Lotto();
int menu = inputMenu();
switch (menu) {
case AUTO:
lotto.genAuto();
break;
case MANUAL:
lotto.genManual();
break;
default:
}
lotto.print();
private static int inputMenu() {
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
return x;
}
}
객체지향 프로그래밍에서는 가시적으로 이해하기 쉽게 객체 + 메서드 를 사용한것이 보일겁니다.
이것이 객체지향 프로그래밍 방법론의 가장 중요한 핵심입니다. 인간의 표현방식을 그대로 코드화하기위해 객체를 중심해 둔것이 객체지향 프로그래밍 방법론 입니다.
2.객체지향의 메소드
구조적인 프로그래밍은 구조화된 데이터를 다른 파일에서 사용하는것이 편리했는데요.
클래스.메서드(객체)로써 구조화된 객체를 사용하는데 제약이 없었습니다.
하지만 이렇게 구조화된 데이터에 자유로이 접근,수정 하게된다면 캡슐화가 깨져버리는 현상이 발생하게됩니다.
그래서 우리는 구조화된 데이터에 Private이라는 키워드로 다른 파일에서 사용되는 객체의 멤버변수에 접근을 막을 수 가있었습니다. 그렇다면 객체지향에서는 메서드를 제공해주어야 다른곳에서 사용할텐데 어떠한 방식으로 제공하게될까요?
1) 인스턴스 메서드
우리는 로또번호를 자동으로 생성되는 메서드를 Program2라는 클래스파일에서 사용해야하는데 이제는 Lotto클래스에서 함부로 변수와 함수를 사용하지 못했습니다.
import java.util.Random;
import java.util.Scanner;
public class Lotto {
public static void printLotto(int[] lotto) {
for(int i=0; i<6; i++)
System.out.printf("%d ", lotto[i]);
System.out.println();
}
public static void genLottoManual(int[] lotto) {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < lotto.length; i++) {
int num = Integer.parseInt(scanner.next());
lotto[i] = num;
}
}
public static void genLottoAuto(int[] lotto) {
Random rand = new Random();
for(int i=0; i<6; i++)
lotto[i] = rand.nextInt(45)+1;
}
}
이코드에서 함수를 생성할때 public static void 함수명 이 존재하게되는데 여기서 public void로써 static이라는 키워드를 지우게되면 다른 클래스 파일인Program2에서 사용이 가능하게됩니다. 어떤로직인지는 모르지만 함수명을 보고 로또를 자동생성해주는 메서드구나 라면서요.
import java.util.Random;
import java.util.Scanner;
public class Lotto {
private int[] nums;
public Lotto() {
this.nums = new int[6];
}
public void genAuto() {
System.out.println("랜덤 값입니당.");
Random rand = new Random();
for (int i = 0; i < 6; i++) {
this.nums[i] = rand.nextInt(45) + 1;
}
}
genAuto()라는 메서드에서 static이라는 키워드를 삭제하고 메소드를 호출할때 매개변수로써 객체를 전달받지않고 객체를 중심에 두고 객체를 묵시적으로 전달받는 함수를 우리는 인스턴스함수라고 부릅니다.
그렇다면 인스턴스 함수의 경우 매개변수명도 없이 어떻게 객체를 전달받고 어떻게 전달받은 객체를 사용할수 있을까?
바로 예약된 매개변수인 this라는 키워드가 있습니다. 자바에서 제공해주는 예약어로써
객체지향 방식으로 객체를 넘겨받는 인스턴스 함수에서만! 사용할 수 있는 변수입니다.
그렇기 때문에 static이라는 함수에서는 사용할 수 없습니다.
this라는 키워드는 삭제할 수 있지만 현재는 구분이 자연스럽게 될때까지는 무조건 사용하겠습니다.
마지막으로 함수와 메소드라는 말을 반복적으로 사용했는데 객체지향 프로그래밍에서는 함수를 메소드(Method)라고 부릅니다. 객체지향에서는 함수를 객체의 기능정도로 보기때문에 함수는 객체를 이용하는 방법으로 인식하기때문입니다.
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 14일차 -27 (0) | 2020.03.17 |
---|---|
에이콘 아카데미 JAVA 복습 2주차 정리 -2 (0) | 2020.03.15 |
자바기반의 웹&앱 응용 SW개발자 양성과정 13일차 -26 (0) | 2020.03.13 |
자바기반의 웹&앱 응용 SW개발자 양성과정 12일차 -25 (0) | 2020.03.12 |
자바기반의 웹&앱 응용 SW개발자 양성과정 12일차 -24 (0) | 2020.03.12 |
댓글