수업을 계속 들으면서 앞에 부분은 상대적으로 이해가 잘 되었으며 만약 부족한 부분이 생기면
"익숙하지 않아서 그렇지 복습을 열심히 하면 될 것이다."라는 생각이 있었다.
그런데 비전공자의 입장에서 "Java는 객체지향 프로그래밍이다"라는 말은 와 닿지 않았다.
OOP부터 수업을 들으면서도 어렵다.
하지만 정말 Java는 객체 지향 프로그래밍이다. 그래서 여기서부터는 정말 열심히 복습해야 한다.
객체를 잘 다루지 못한다면 Java는 계속 어려울 것이다.
현재 수업은 클래스, 상속, 인터페이스, 예외처리, 컬렉션 모두 끝난 상태이다.
약 3주 동안 Java에 대해 웬만한 것은 거의 다 배웠다.
수업 내용 자체는 좋다. 만약 내가 혼자 Java를 공부하려고 했으면 아직도 앞부분을 공부하고 있을 것이다.
Java의 전체적인 틀을 이해한 뒤 제대로 공부를 하려고 했기 때문에 처음 생각했던 판단이 좋았다고 생각한다.
Blog에 수업내용과 내가 스스로 Java 책을 보면서 공부한 내용을 정리하고 있다. 기록을 남긴다는 것이 조금 시간이
걸리는 일이지만 정리를 하면서 한번 더 볼 수 있고 나중에 다 도움이 될 것이라고 생각한다.
최대한 이해한 내용을 여기서부터는 더욱 비전공자의 입장으로 정리를 하면서 나도 공부를 더 할 것이고 만약 이 Blog를
보는 분이 있다면 도움이 되었으면 좋겠다.
객체 지향 프로그래밍(OOP : Object-Oriented Programming)
어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성한다.
소프트웨어를 개발할 때에도 부품에 해당하는 객체를 먼저 만든다. (부품 : 객체)
그리고 객체를 하나씩 조립해서 완성하는 기법을 객체 지향 프로그래밍(OOP)이라고 한다.
객체들은 각각 독립적으로 존재하고 다른 객체와 서로 상호작용 하면서 동작한다.
객체들 사이의 상호작용 수단은 메서드이다. 이때 객체가 다른 객체의 기능을 이용하는 것이 바로
메서드 호출이다.
리턴값 = 계산기객체.메서드(매개값1, 매개값2, ...);
1. 객체에 도트(.) 연산자를 붙이고 메서드 이름을 기술하면 된다. 도트 연산자는 객체의 필드와 메서드에 접근할 때
사용한다.
2. 매개 값은 메서드를 실행하기 위해 필요한 데이터이다.
int result = Calculator.add(10,20);
//Calculator : 계산기
//add : 메서드
//(10,20) : 매개값
객체 상호작용은 객체 간의 메서드 호출을 의미하며 매개 값과 리턴 값을 통해서 데이터를 주고받는다.
객체지향 프로그래밍의 장점
1. 코드 재사용성이 높다.
2. 코드 관리가 용이하다.
-> 코드 간의 관계를 이용해서 쉽게 코드 변경이 가능하다.
3. 신뢰성이 높은 프로그래밍이 가능
-> 접근제어 지시자, 메서드를 이용해서 데이터를 보호하고 코드 중복을 제거해서 불일치로 인한 오동작을 방치 가능
추상화
-> 객체에 필요한 속성과 기능을 추출하고 불필요한 것들을 제거하는 과정이다.
ex ) tv를 추상화
-> 리모컨, 스피커, 안테나, 모니터 전원...
-> 음성인식, 볼륨 조절, 채널 변경
-> 속성은 변수
-> 음성인식, 볼륨 조절 기능 -> 메서드
객체와 클래스
Java에서 설계도가 바로 클래스(class)이다. 클래스에는 객체를 생성하기 위한 필드와 메서드가 정의되어 있다.
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
예를 들면 TV 객체는 TV 클래스의 인스턴스인 셈이다.
그리고 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.
하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있는데 이것은 동일한 설계도로부터 여러 개의 TV를 만드는 것과
동일하다.
객체 지향 프로그래밍 개발의 3단계
1. 클래스를 설계한다.
2. 설계된 클래스를 가지고 사용할 객체를 생성한다.
3. 생성된 객체를 이용한다.
클래스 선언
<작성 규칙>
1. 하나 이상의 문자로 이루어져야 한다. 예 : Banana , AppleSmell
2. 첫 글자에는 숫자가 올 수 없다.
3. '$' , '_' 외의 특수 문자는 사용할 수 없다.
4. 자바 키워드는 사용할 수 없다. 예 : String(X) int(X)
클래스 이름은 한글이든, 영어든 상관없지만 보통 영어로 만든다. 또한 통상적으로 클래스 이름이 단일 단어라면
첫 글자를 대문자로 하고 나머지는 소문자로 작성한다.
만약 서로 다른 단어가 혼합된 이름을 사용한다면 각 단어의 첫 글자는 대문자로 작성하는 것이 일반적이다.
클래스로부터 객체 생성
new 클래스( );
클래스 변수;
변수 = new 클래스( );
클래스 변수 = new 클래스( );
new는 클래스로부터 객체를 생성시키는 연산자이다. new 연산자 뒤에는 생성자가 오고, 생성자는 클래스( ) 형태를 가지고 있다. new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성된다.
<실습>
package com.kh.vo;
import java.util.Scanner;
public class Calculator {
public void main() {
Scanner sc = new Scanner(System.in);
boolean bool = true;
while (bool) {
System.out.println("첫 번째 정수 입력 : ");
int num1 = sc.nextInt();
System.out.println("두 번째 정수 입력 : ");
int num2 = sc.nextInt();
System.out.println("연산자 입력 ( + , - , * , / ) : ");
char op = sc.next().charAt(0); // ************ 문자 받는 char
switch (op) {
case '+': // 문자 하나만 받을때 '' 문자열을 받을때 " " result1 이런것들이 method
int result1 = add(num1, num2);
System.out.println(result1);
break;
case '-':
int result2 = minus(num1, num2);
System.out.println(result2);
break;
case '*':
int result3 = multi(num1, num2);
System.out.println(result3);
break;
case '/':
int result4 = div(num1, num2);
System.out.println(result4);
break;
}
System.out.println("한번 더 하시겠습니까 ? (y / n)");
char answer = sc.next().charAt(0);
if (answer == 'n') {
return;
}
}
}
public int add(int num1, int num2) { // 메소드 오버로딩 : 클래스 내에 같은 이름을 여러개 선언하는것
int result = num1 + num2;
return result;
}
public int minus(int num1, int num2) {
int result = num1 - num2;
return result;
}
public int multi(int num1, int num2) {
int result = num1 * num2;
return result;
}
public int div(int num1, int num2) {
int result = num1 / num2;
return result;
}
}
코드를 실행하면 결과가 나온다.
package com.kh.run;
import com.kh.vo.Calculator;
public class Run {
public static void main(String[] args) {
Calculator cc = new Calculator();
cc.main();
}
}
첫 번째 정수 입력 :
15
두 번째 정수 입력 :
30
연산자 입력 ( + , - , * , / ) :
+
45
한번 더 하시겠습니까? (y / n)
y
첫 번째 정수 입력 :
31
두 번째 정수 입력 :
24
연산자 입력 ( + , - , * , / ) :
*
744
한번 더 하시겠습니까? (y / n)
n
'이공계전문기술연수 > Java' 카테고리의 다른 글
<이공계전문기술연수>18. Java 상속 (0) | 2019.08.21 |
---|---|
<이공계전문기술연수> 15. Java 배열(2) (복사/버블정렬/로또/다차원) (0) | 2019.08.15 |
<이공계전문기술연수> 14. Java 배열(1) (0) | 2019.08.15 |
<이공계전문기술연수> 13. 참조 타입 / 참조 변수 (0) | 2019.08.15 |
<이공계전문기술연수> 12. Java 반복문: while문 / break문 (0) | 2019.08.13 |