[JAVA+국비교육] 클래스(Class), 객체 지향(OOP) 시작!
by 무작정 개발2021.12.28(6일 차)
벌써 6일째 수업이다. 시간이 참 빠르다 생각이 든다. 오늘부터 본격적으로 클래스에 대해 배우게 된다. 저번 시간까지는 배열에 대해 배웠는데 주말에 다시 한번 복습을 해야겠다.
오늘부터 본격적으로 객체지향에 대해 배운다... 난 객체지향이 참 어렵다고 느껴진다. 그래서 꾸준히 복습과 예습을
하기로 다짐했다. 강사님께서는 책의 챕터 순으로 나가지 않고 섞어가며 진행하신다고 하셨다. 그래서 객체지향에 대한 정의와 수업내용을 작성하며 공부하고자 한다.
오늘의 수업 내용
먼저 지난 시간 수업을 복습하고 객체지향에 대해 배운다.
버블 정렬
package com.day5;
public class Test2 {
public static void main(String[] args) {
//버블정렬
int [] num = {37, 26, 19, 12, 7};
int i, j, temp;
System.out.print("Source Data:");
for(i=0; i<num.length; i++) {
System.out.printf("%4d", num[i]);
}
System.out.println();
//Bubble Sort
for(i=1; i<num.length; i++) {
for(j=0; j<num.length-i; j++)
if(num[j] > num[j+1]) {
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
System.out.print("Sorted Data:");
for(int s : num) {
System.out.printf("%4d", s);
}
System.out.println();
}
}
2차원 배열
package com.day5;
public class Test4 {
public static void main(String[] args) {
//배열의 배열
int [][] arr = new int[6][6];
int i, j;
int n;
n=0;
for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
n++;
arr[i][j] = n;
arr[i][5] += n;
arr[5][i] += n;
arr[5][5] += n;
}
}
for(i=0; i<arr.length; i++) {
for(j=0; j<arr.length; j++) {
System.out.printf("%4d", arr[i][j]);
}
System.out.println();
}
}
}
package com.day5;
public class Test5 {
public static void main(String[] args) {
int [][] a = {{5,3,6}, {2,7,8}, {5,1,7}};
int [][] b = {{6,9,3}, {1,5,9}, {2,7,9}};
int [][] sum = new int [3][3];
int i, j;
for(i=0; i<a.length; i++) {
for(j=0; j<b.length; j++) {
sum[i][j] = a[i][j] + b[i][j];
System.out.printf("%4d", sum[i][j]);
}
System.out.println();
}
System.out.println();
}
}
// 배열 끝
● 객체지향 프로그래밍이란 객체를 이용하는 프로그래밍 방식
OOP(Object Oriented Programming)
객체지향 프로그래밍의 특징에는
1. 추상화(Abstraction)
2. 캡슐화(EnCapsulation)
3. 상속(Inheritance)
4. 다형성(Polymorphism) 이 있다.
자세한 내용을 수업 진도에 따라 정리하고자 한다.
객체지향 프로그래밍의 구성요소는 크게 클래스(Class), 객체(Object), 메서드(Method)가 있다.
클래스(Class)
클래스(Class)는 표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것이라 할 수 있다. 즉, 클래스는
객체의 속성을 정의해 놓은 것이라 할 수 있다. 쉽게 말하자면 클래스는 객체의 '설계도면' 혹은 '틀'이라 설명할 수 있다.
클래스를 만드는 이유는 재사용성. 객체(object)를 만드는 기능.
한 클래스 안에 많은 내용이 있으면 메인 메서드를 실행할 때 다 거친 후 진행하기에 처리속도가 지연된다.
그래서 메서드마다 분리시킴
객체(Object)
설계도면을 통해 건설한 건물, 건물이 지어지면 건물에 주소(Reference)가 부여되고 주소를 통해 건물을 찾아갈 수 있다.
객체(Object)는 컴퓨터, 책상 등 현실 세계에서 흔히 찾아볼 수 있는 대상을 모델링한 것이다. 모든 사물을 프로그램의 객체로 만들 필요는 없고 프로그램에서 필요한 대상들만 객체화한다.
객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과
식별 가능한 것을 말한다. 객체는 속성과 기능으로 구성되어 있는데 이 속성과 기능을 필드(field)와 메서드(method)라 부른다.
속성(property) - 멤버 변수(인스턴 수변수) , 특성, 필드, 상태
기능(function) - 메서드, 함수, 행위
클래스 --- 인스턴스화 --> 인스턴스(객체)
클래스를 이용해 객체를 만드는 과정을 클래스의 인스턴스화라고 한다. A라는 클래스에서 만들어진 객체를 A클래스의
인스턴스라고 한다. 즉 , 객체 = 인스턴스라고 볼 수 있다.
메서드(Method)
메서드는 어떠한 작업을 수행하는 코드를 하나로 묶어 놓은 것 즉, 클래스에 선언된 함수이다.
전역 변수 & 지역변수
전역 변수 : (instance 변수) 클래스 전체에 영향을 미치는 변수. 메모리에 올라가야만 사용할 수 있는 변수.
메모리에 올라놓은 것 = 객체 생성
객체 생성을 진행해야 사용 가능한 변수.
지역 변수 : 각 메서드 안에 속하는 변수(해당 메서드만 사용 가능)
접근 지정자(4가지) : public / private / protected / default
return : 메서드를 실행한 후의 반환 값. return값이 없을 경우 void로 표현
매개변수 : 8개의 자료형 & String & void 가능
- 메서드에서 매개변수를 원하면 반드시 사용해야 함. 입력하지 않거나 자료형이 다르거나 순서가 틀리면 오류 발생
package com.day5;
import java.util.Scanner;
public class Rect { //클래스
int w, h; // instance변수(전역변수) : 클래스 안 어디서나 사용 가능한 전역변수
public void input() { //input메소드
Scanner sc = new Scanner(System.in);
//int w,h; // 지역변수(로컬변수)
System.out.print("가로 : "); //10
w = sc.nextInt();
System.out.print("세로 : ");//5
h = sc.nextInt();
//return; void라 설정해놨기 때문에 return 생략 가능
}
public int area() { //return값이 정수형
int result; //지역변수 : 다른 메소드에서 인식 못함
result = w * h;
return result;
}
public int length() { //return값이 정수형
return (w+h) * 2;// 지역변수를 만들어서 반환해도 되지만, return옆에 바로 결과값을 넣어도 문제 없음
}
public void print(int area, int length) { // int area()랑 void print에서 a와 l를 가져옴
// 반환값없음.매개변수 2개 필요.메소드를 실행하고 끝남
System.out.println("가로 :" + w);
System.out.println("세로 :" + h);
System.out.println("넓이 :" + area);
System.out.println("둘레 :" + length);
}
}
package com.day5;
public class Test6 { //클래스의 초기값이 NULL이다.
public static void main(String[] args) {
//객체 생성
Rect r1 = new Rect(); //같은 패키지 안에 있어서 import안해도된다.
r1.input();
int area = r1.area();
r1.length();
int length = r1.length();
r1.print(area, length);// 변수명은 클래스 생성 시 이름과 달라도 문제없지만 자료형은 맞춰야함
Rect r2 = new Rect();
r2.input();
int x = r2.area();
int y = r2.length();
r2.print(area, length);
}
}
오늘까지 수업은 나름 쉬웠다. 국비교육을 시작하기 전에 자바를 예습해서 다행이라 생각한다. 난 항상 책으로 공부를 해서 그런지 책의 챕터 순서와 다르게 나가니 어색했다. 편도 1시간 20분 거리를 버티면 대면 수업을 가서 많이 힘들지만 최대한 버텨보자.
'Language > Java' 카테고리의 다른 글
[JAVA+국비교육] 상속, Call By Value, Call By Reference (0) | 2022.01.01 |
---|---|
[JAVA+국비교육] static, this, 변수 초기화 방법, Overloading, 생성자 (0) | 2021.12.30 |
[JAVA+국비교육] 배열 기초 (0) | 2021.12.30 |
[JAVA+국비교육] 반복문 (0) | 2021.12.30 |
[JAVA+국비교육] 증감연산자/산술연산자 & for문/if문 (0) | 2021.12.27 |
블로그의 정보
무작정 개발
무작정 개발