티스토리 뷰

 

↔ 절차 지향 프로그래밍

순서에 맞추어 단계적으로 실행되도록 명령어 나열. 기능 중심.

 

1. 객체 지향

-객체 : 눈에 보이는 사물. 눈에 보이지 않는 것도 객체가 될 수 있음.

-객체 지향 프로그래밍 : 객체 구성하고 객체 단위로 프로그래밍(필드, 메소드)

-객체를 정의, 각 객체가 어떤 기능을 제공하고 객체 간 협력(상호작용)을 어떻게 구현할 것인지. 함수를 통해 구현.

 

-객체 지향 요소

아래의 것들을 가지고 객체를 만듦.

클래스 인터페이스
(일반) 클래스 추상 클래스 내부에 추상함수를 만들어서
인터페이스를 사용(상속)하는
  객체 못 만듦.
상속받아서 만들 수 있음(?)

2. 클래스

객체를 만들기 위한 객체의 형(자료형)

객체의 속성(Property), 기능(Method)를 코드로 구현. 객체의 특성, 기능을 요약해놓은 것이 클래스.

 

(1) 개념 및 기본 구조

-변수 : 각각 선언

int score1 = 80;
int score2 = 70;
int score3 = 92;
...
double avg = 78.2;

-배열 : 연속된 같은 자료형을 한꺼번에

int[] scores = {80, 70, 92, ...};
double avg = 78.2;

-구조체 : 서로 다른 변수 묶음. 메소드(함수) 포함 가능. but 상속 불가

struct Score{
    int[] scores = {80, 70, 92, ...};
    double avg = 78.2;
}

-클래스

class Score{
    int[] scores = {80, 70, 92, ...};
    double avg = 78.2;
    void printAvg(){
        //실행문
    }
}

 

(2) 클래스 구조

-외부 : package, import, 외부 클래스(external class)

-내부 : field 변수, 메소드(멤버), 생성자, 내부 클래스(멤버)

package
import
class

public class A {
    //클래스 내부
    필드(멤버 변수) // ↔지역변수 : 메소드 내부
    메소드
    생성자  // AClass ac = new AClass();  default 생성자 호출
           //  Aclass ab = new Aclass(1, "java"); 매개변수로 정수, 문자열 받는 생성자 호출    
    이너 클래스(내부 클래스)
}
필드 메소드 생성자 내부 클래스
클래스 소속 변수
클래스 특징(속성)
클래스 기능
(함수 같은 것)
객체 생성 시 호출
생성자 이름 == 클래스 이름
클래스 내부에 정의된
클래스

 

_예시) 생성자 클래스, 객체 생성하고 호출하는 클래스

package teata;
public class AClass { //생성자 AClass
	public AClass() { //디폴트 생성자
	}
    
	public AClass(int a, String str) { //정수와 문자열을 받아 실행하는 생성자
		System.out.println(a);
		System.out.println(str);
	}

	public void func() { //메소드
		System.out.println("AClass");
	}
}
package test0126;
import java.util.Scanner; // 1.java.lang이 아닌 것을 사용할 때 import
import teata.AClass;  // 2.다른 패키지에 만든 클래스 임포트
class TestB{ // 3.현재 클래스에서 새로운 클래스 만듦.
    void func() {
	    System.out.println("TestB");
	}
}

public class ArrayTest01 {
	static void sum(int[] a, int[] b) { // 배열의 주소값 가져옴
		for(int i=0; i<a.length; i++) {
			a[i] += b[i]; // a[i] = a[i] + b[i];
			System.out.print(a[i]+" ");
		}
	}
	public static void main(String[] args) {
		AClass ac = new AClass(); //2. AClass 생성자의 디폴트 객체 생성
		ac.func();                //함수 호출
		
		AClass ab = new AClass(1, "java"); //2.
		
		Scanner sc = new Scanner(System.in); //1.
	}
}

 

(3) 클래스(Class), 객체(Object), 인스턴스(Instance)

클래스 인스턴스 객체
객체를 만들기 위한 객체의 형
객체의 속성, 기능(메소드)
클래스가 메모리에 생성된 상태 클래스들이 실체화된 것.
생성된 클래스의 인스턴스

(실체화 : heap 메모리에 공간 할당)

-인스턴스화 : new 이용. 객체 생성.

 

-객체 생성 코드

A a = new A();
class 참조 변수
A의 주소
  Heap에 저장되는
실제 객체 생성
 

 

_예제) Car, CarTest

package test0126;
public class CarTest {
    public static void main(String[] args) {
		// 객체 2개 생성. c1, c2
        Car c1 = new Car("Red", 2021); // 2번
        Car c2 = new Car("black", 2020);
				
        c1.display(); // 3.메서드 호출
        System.out.println();
        c2.display();
		
        Car c3 = new Car();
        c3.color = "blue";
        c3.year = 2022;    //생성할 때 넣지 않고 나중에 넣음.
        c3.display();
        System.out.println();
		
        //Car c4;
        //c4.color = "Yellow";
        //변수만 선언하고 실제 객체 안 만들어진 상태인데 객체 접근하는 거라 오류.
        //객체 생성해야 데이터를 넣을 수 있음.
		
        Car c4 = new Car();
        c4.color = "white";
        c4.year = 2019;
        //객체 생성 : heap 영역에 메모리 생성. 값? 들어가는 것.	
    }
}

└Java는 Heap 메모리에 직접 접근 불가. 참조변수를 통해 접근 가능.

  참조변수명.필드명 | 참조변수명.메소드명  해당번지 위치의 Heap 메모리로 이동.

package test0126;
public class Car { //Car Class
	String color; //멤버 변수
	int year;
	
	//생성자
	public Car() { //1.default 생성자
	}
    
	public Car(String c, int y ) { //2.문자열과 정수를 받는 생성자
		color = c;
		year = y;
	}
	
	public void display() { //3.함수 display : color, year 출력하는
		System.out.println(color);
		System.out.println(year);
	}
}

 

(4) 클래스 메모리 구조

class 영역
static 영역
final 영역
Method 영역
Instance 영역
Stack Heap
변수 공간이 만들어지는 곳.
실제 배열 값이 들어있는 주소 저장.
실제 배열 값 저장되는 곳
초기화하지 않으면
기본값 없고 출력 불가
자료형마다 기본값 존재.

 

end

'수업 > └Java' 카테고리의 다른 글

[CH06_3]클래스 외부 구성 요소  (0) 2022.01.31
[CH06_2]클래스 내부 구성 요소  (0) 2022.01.31
[CH05_2]참조 자료형 : String  (0) 2022.01.31
[CH05_1]참조 자료형 : 배열(Array)  (0) 2022.01.31
[CH04_02]제어문 : 반복문  (0) 2022.01.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함