728x90

 

클래스 : 원형

인스턴스 : 복제본

 

원형본인 클래스에서 인스턴스를 만들고 새 변수에 담아두고 이 인스턴스의 메소드를 호출하므로써 이 인스턴스를 조작할 수 있게되는 메커니즘

 

 

 

Print05.delimiter = "----";	
Print05.A();					
Print05.A();	

Print05.delimiter = "====";	
Print05.B();
Print05.B();		

Print05.delimiter = "****";
Print05.A();
Print05.delimiter = "====";
Print05.B();

 

위와 같이 계속 변수의 파라미터를 계속 바꿔서 써야하는 상황이라면?

이럴 때 인스턴스 사용

 

print클래스 안에 있는 메소드들의 static들 삭제

 

 

static 역할

static 뒤에 오는 String(변수(?))이 클래스소속이라는 의미

 - 이렇기에 인스턴스 소속 메소드를 쓰는게 목적이므로 스태틱을 삭제하여 메소드를 클래스 소속에서 인스턴스 소속으로 변경해주는 것

 

인스턴스 사용의 장점

클래스를 재료로 사용할 때 세분화시키고 싶다면 인스턴스로 부분적으로 각각 다른 네이밍과 기능을 지정해 사용할 수 있다

 - 전처럼 중복된 코드를 계속 바꿀 필요 없이, 파라미터 ****가 필요하면 p1 인스턴스를 불러오고 +가 필요하면 p2를 부르면된다

 

 

전체코드

// OOP 5. 인스턴스

class Print05 {
	public String delimiter = ""; 
	public void A() {
		// ... 1억줄 코드
		System.out.println(delimiter); // printA() 메소드 안에  delimiter가 없다면
		System.out.println("A");	   // 이 파일 클래스(메인 메소드 위에)에서 찾아서 사용
		System.out.println("A");	   // 
	}
	public void B() {
		// ... 1억줄 코드
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
}

public class OOP05 {
	public static void main(String[] args) {
	
	// 클래스 : 원형본
	// 인스턴스 : 복제본
	//
	// 원형본인 클래스에서 인스턴스를 만들고 새변수에 담아두고 이 인스턴스의 메소드를 호출하므로써
	// 이 인스턴스를 조작할 수 있게되는 메커니즘
	
//		Print05.delimiter = "----";	
//		Print05.A();					
//		Print05.A();	
//	
//		Print05.delimiter = "====";	
//		Print05.B();
//		Print05.B();		
//	
//		Print05.delimiter = "----";
//		Print05.A();
//		Print05.delimiter = "====";
//		Print05.B();
		
		
	// 위와 같이 계속 변수의 파라미터를 계속 바꿔서 써야하는 상황이라면?
	// 이럴 때 인스턴스 사용
	
	// static : statice 뒤에 오는 String(변수(?))이 클래스소속이라는 의미
	// 고로 위에 클래스 안 메소드에서 static 삭제
	Print05 p1 = new Print05();
	p1.delimiter = "****";
	p1.A();
	p1.A();
	p1.B();
	p1.B();

	Print05 p2 = new Print05();
	p2.delimiter = "++++";
	p2.A();
	p2.A();
	p2.B();
	p2.B();
	// 전처럼 중복된 코드를 계속 바꿀 필요 없이,
	// 파라미터 ****가 필요하면 p1 인스턴스를 불러오고 +가 필요하면 p2를 부르면된다

	}
}

 

 

728x90
반응형
728x90

 

JAVA 객체 지향 프로그래밍 - 1. 수업소개(객체지향+절차지향 개념)

 

메소드를 다른 컴퓨터 언어에서는

함수 = method = fuction = subroutine = procedural

 

절차지향 프로그래밍(procedural programming)의 패러다임은 procedural

즉, 자바에서는 메소드라고 불리우는 것을 이용해서 프로그램을 정리정돈하는 프로그래밍 기법

즉, 메소드를 이용해서 작은 부품을 만들고 이것을 결합해서 더 큰 부품을 만들어가는 테크닉이 procedural programming

 - 많은 컴퓨터 언어가 이 패러다임을 따르고 있고, 대표적인 언어가 C

 

but 몇몇 엔지니어들은 메소드만 가지고는 프로그램을 만드는데 부족함을 느끼고 서로 연관된 메소드와 변수들을 모아서 그루핑하고 이름을 붙여서 정리정돈 하고 싶어졌다. 그래서 만들어진 수납상자가 클래스(class)

클래스를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법론을 객체지향 프로그래밍 또 이런 방법론을 언어 차원에서 제공하는 것객체지향 언어라고 한다. 객체지향의 개념을 편협하게 설명한 내용들

 

클래스

메소드와 변수를 그루핑하고 이름을 붙인 것

728x90
반응형
728x90

JAVA method - 6. 메소드의 활용

 

메소드 사용의 장점

1.코드의 가독성↑

 - 1억줄의 코드에서 수많은 로직이 얽힌 코드를 이해해야할 때...?

2.재사용 용이 : 호출만 하면 됨

3.유지보수 관리 용이

 

public class method06 {
	public static void main(String[] args) {
	
			double valueOfSupply = 10000.0;
			double vatRate = 0.1;
			double vat = valueOfSupply * vatRate;
			double total = valueOfSupply * vat;

			System.out.println("Value of supply : " + valueOfSupply);
			System.out.println("VAT : " + vat);
			System.out.println("Total : " + total);
	}
}

메소드를 사용해 위의 코드를 아래의 코드처럼 간결하고 유지보지가 용이하게 바꿔보자

public class method06 {
	public static double valueOfSupply = 10000.0; // 공급가액
	public static double vatRate = 0.1;           // 부가가치 세율
	// public static이라 붙이는 의미 : 위의 method06 클래스의 직접적인 소속이라는 것

	public static double getVAT() {
		return valueOfSupply * vatRate;
	}
	public static double getTotal() {
		return valueOfSupply + getVAT();
	}
	
	public static void main(String[] args) {
	
		
	// 지역변수
//	double vat = valueOfSupply * vatRate;  // 부가세
	double vat = getVAT(); // 위와 같은 코드. get메소드 get변수명의 변수값을 가져온다
//	double total = valueOfSupply + vat;    // 합계
	double total = getTotal();
	
	
	System.out.println("Value of supply : " + valueOfSupply);
	System.out.println("VAT : " + vat);
	System.out.println("Total : " + total);

	// 메소드 사용의 장점
	// 1.코드의 가독성↑
	// 2.재사용 용이 : 호출만 하면 됨
	// 3.유지보수 관리 용이
	}
}

반복되는 코드들을 메소드화해서 메인메서드 밖에서 만들고, 지역변수를 전역변수화해서 이 클래스 안 전체에서 사용 가능케 전환

 

  • public static 붙이는 의미 : 위의 method06 클래스의 직접적인 소속이라는 것
  • get메소드 : get변수명의 변수값을 가져온다

 

 

 


 

 

JAVA method - 7. 수업을 마치며

메소드는 서로 연관된 명령을 그루핑해서 이름을 붙인 것

클래스는 서로 연관된 메소드와 변수를 그루핑해서 이름을 붙인 것

 

클래스(class)

많은 컴퓨터 언어들이 클래스의 개념을 갖고있지 않거나 처음에는 없다가 나중에 추가된 경우가 많다

메소드만으로도 할 수 있는 것이 많고, 충분히 혁명적

 

객체지향 프로그래밍(Object Oriented Programming, OOP)

서로 연관된 메소드와 변수를 그루핑해서 이름을 붙인 것이 클래스

이 클래스를 복제해서 서로 다른 내부상태를 가지고 있는 복제본들을 인스턴스

 

class & instance & object

클래스와 인스턴스를 우선 객체라고 생각해도 좋다

객체를 뼈대로 하는 프로그램을 만들어가는 프로그래밍 방법론을 객체지향 프로그래밍이라고 한다

 

많은 컴퓨터언어와 소프트웨어 객체지향 프로그래밍에 따라서 만들어지고 있다.

또한 남들이 만든 라이브러리가 OOP 방법에 따라 만들어져 있을 수도 있다

객체지향은 입문자가 중급자가 되는 길목에 있는 개념이라고 할 수 있다

코드의 양이 많아지고 남들과 공유해야할 일이 많아지고 있다면 객체지향을 공부할 시기

 

728x90
반응형
728x90

017. 객체지향 언어란 - 특징 -

 

 

출처 : 위키백과

 

기본 구성요소에 대해 알아봤다면, 각각의 특징에 대해서 알아보자

 

1.자료의 추상화


불필요한 정보는 숨기고 중요한 정보만 표현하여 프로그램을 간결화 하는 것

 

 - 자료 추상화를 통해 정의된 자료형을 추상 자료형이라 함

 - 객체지향 프로그래밍(OOP)에서 일반적으로,

     추상 자료형을 클래스

     추상 자료형의 인스턴스를 객체

     추상 자료형에서 정의된 연산을 메소드

             라고한다. 

 

2.상속

새로운 클래스가 기존 클래스의 데이터와 연산을 이어 받아 사용할 수 있게 하는 기능

상속받는 새 클래스를 부클래스, 파생 클래스, 하위클래스, 자식 클래스 등으로 부르며, 기존 클래스를 기반클래스, 상위 클래스, 부모 클래스 등으로 부른다. 

상속개념을 통해 상위 클래스에서 이어받은 하위 클래스를 이용해 필요에 따라 클래스 수정이나 클래스 간 종속 관계를 형성해 객체를 조직화 할 수 있다

 

 

3.다중 상속

클래스가 2개 이상의 클래스로부터 상속 받을 수 있는 기능

 클래스들의 기능이 동시에 필요할 때 사용하나 상속관계에 혼란을 줄 수 있으니 주의가 필요하고 언어마다 가능유무가 다르니 확인이 필요하다

 

4.다형성 개념

어떤 한 요소에 여러 개념을 넣어 놓는 것

 보통 오버라이딩이나 오버로딩을 의미한다

 - 오버라이딩 : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것

 - 오버로딩 : 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것

 

5.동적 바인딩

실행 시간 중에 일어나거나 실행과정에서 변경될 수 있는 바인딩

바인딩 : 프로그램의 기본 단위에 해당 기본 단위가 가질 수 있는 속성 중에서 일부 필요한 속성만을 선택하여 연결해 주는 것

 ex) 변수를 구성하는 식별자(이름), 자료형 속성, 하나 이상의 주소(참조), 자료값에 구체적인 값을 확정하는 것

 

컴파일 시간에 완료되어 변하지 않는 정적 바인딩과는 반대 개념이다

 

 

728x90
반응형

+ Recent posts