반응형

 

1. 개요

  객체지향은 현실 세계의 개체를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있는 기법을 말한다.

  • 객체지향 기법은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용되고 있다.
  • 객체지향은 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다.
  • 객체지향은 복잡한 구조를 단계적 계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다.
  • 객체지향은 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다.
  • 객체지향의 주요 구성 요소와 개념에는 객체, 클래스, 캡슐화, 상속, 다형성이 있다.

2. 객체

  객체는 데이터와 데이터를 처리하는 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈이다. 

  객체의 특성

- 객체는 독립적으로 식별 가능한 이름을 가지고 있다.

- 객체가 가질 수 있는 조건을 상태라고 하는데, 일반적으로 상태는 시간에 따라 변한다.

- 객체와 객체는 상호 연관성에 의한 관계가 형성된다.

- 객체가 반응할 수 있는 메시지의 집합을 행위라고 하며, 객체는 행위의 특징을 나타낼 수 있다.

- 객체는 일정한 기억장소를 가지고 있다.

 

3. 클래스

  클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로, 객체의 일반적인 타입을 의미한다.

  • 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀이다.
  • 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화라고 한다.
  • 동일 클래스에 속한 각각의 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서, 그 속성에 대한 정보가 서로 달라서 동일 기능을 하는 여러 가지 객체를 나타나게 된다.
  • 최상위 클래스는 상위 클래스를 갖지 않는 클래스를 의미한다.
  • 슈퍼 클래스는 특정 클래스의 상위(부모)클래스이고, 서브클래스는 특정 클래스의 하위(자식)클래스를 의미한다.

4. 캡슐화

  캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.

  • 캡슐화된 객체는 인터페이스를 제외한 세부 내용이 인폐(정보 은닉)되어 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적다.
  • 캡슐화된 객체들은 재사용이 용이하다.
  • 객체들 간의 메시지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아진다

5. 상속

  상속은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스가)가 물려받는 것이다.

  • 상속을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다.
  • 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.
  • 상위 클래스의 속성과 연산을 하위 클래스가 사용할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어의 재사용을 높이는 중요한 개념이다.
  • 다중상속 : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것이다.

6. 다형성

다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다.

  • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
  • 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는 것이다.

 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

  미들웨어는 운영 체제와 해당 운영 체제에서 실행되는 응용 프로그램 사이에 존재하는 소프트웨어입니다. 기본적으로 숨겨진 변환 계층으로 기능하는 미들웨어는 분산 응용 프로그램의 통신 및 데이터 관리를 가능하게 합니다. 데이터와 데이터베이스가 "파이프" 사이를 쉽게 통과할 수 있도록 두 가지 응용 프로그램을 함께 연결하기 때문에 배관이라고도 합니다. 미들웨어를 사용하면 사용자가 웹 브라우저에서 양식을 제출하거나 웹 서버가 사용자의 프로필을 기반으로 동적 웹 페이지를 반환하도록 요청할 수 있습니다.

 

  일반적인 미들웨어 예로는

  • 데이터베이스 미들웨어
  • 애플리케이션 서버 미들웨어
  • 메시지 지향 미들웨어
  • 웹 미들웨어 및 트랜잭션 처리 모니터

등이 있습니다.

 

  각 프로그램은 일반적으로 SOAP(Simple Object Access Protocol), 웹 서비스, REST(Representational State Transfer) 및 JSON(JavaScript Object Notation)과 같은 메시징 프레임워크를 사용하여 서로 다른 응용 프로그램이 통신할 수 있도록 메시지 서비스를 제공합니다. 모든 미들웨어가 통신 기능을 수행하지만 회사가 사용하기로 선택한 형식은 사용 중인 서비스와 통신해야 할 정보 형식에 따라 다릅니다. 여기에는 보안 인증, 트랜잭션 관리, 메시지 큐, 응용 프로그램 서버, 웹 서버 및 디렉터리가 포함될 수 있습니다. 미들웨어는 데이터를 앞뒤로 보내지 않고 실시간으로 발생하는 작업으로 분산 처리에도 사용할 수 있습니다.

 

출처: Microsoft Azure

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

변수명

작성규칙
첫 번째 글자는 문자 or '$' or '_'이어야 하고 숫자로 시작할 수 없다. price, $price, _companyName
영어의 대소문자 구별 firname / firstName
첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다 maxSpeed, firstName
문자 수(길이)의 제한은 없다  
자바 예약어는 사용할 수 없다  

- 이중에서 변수명으로 할 수 있는 것은?

1. 7eleven

2. $eleven

3. class

4. if

5. false

6. null

 

데이터 타입

1. primitive type

 값의 종류 기본 타입 메모리 크기 값의 범위        
정수 byte 1 byte -128~ 127        
char 2 byte 0 ~ 65,535 혹은
'\ u0000' ~ '\ uffff'
       
short 2 byte  -32,768 ~ 32,767        
int 4 byte -2,147,483,648 ~ 2,147,483,647        
long 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807        
       
실수 float 4 byte          
double 8 byte          
논리 boolean 1 byte true, false         

2. Reference type (4 byte)

class type, interface type, array type, enum type

 

char c = '';  (x)  //에러

char c = ' '; (o)

String str = ""; (o)

byte 타입은 char타입으로 자동 변환 시킬 수 없다 ( o )  ex)강제 타입 변환은 가능

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)   (0)

참조변수와 같은 byte를 가진 원시타입 변수는?

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

  운영체제는 자바 프로그램을 바로 실행 할 수 없습니다. 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문이죠.  이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하고, 이것이 바로 자바 가상 기계(JVM: Java Virtual Machine)입니다. JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 합니다. 영어권에서는 컴퓨터를 흔히 기계라고 부르기 때문에 '자바를 실행시키는 가상의 기계'라고 해서 'JVM'이라는 용어가 나오게 된 것입니다.

  운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제별로 자바 프로그램을 별도로 개발하는 것보다는 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것이다. 따라서 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있습니다.

  바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장하지만, JVM은 운영체제에 종속적입니다. 자바 프로그램을 운영체제가 이해하는 기계어로 번역해서 실행해야 하므로 JVM은 운영체제에 맞게 설치되어야 합니다. JVM은 JDK또는 JRE를 설치하면 자동으로 설치되는데, JDK와 JRE가 운영체제별로 제공됩니다. 

  

 

출처:  이것이 자바다 中

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. 내부 클래스(inner class)

  -우리가 만든 클래스 안에 또 하나의 클래스를 만든 것

  -외부 클래스에서는 안쪽 클래스를 객체화 하여 그 객체로 안쪽 클래스의 자원을 사용한다.

  -내부 클래스에서는 바깥쪽 클래스의 자원을 직접 사용 가능하다.

 

public class outer{

	public class inner{  //내부 클래스
    
    }
}
package ClassInner_nested_local_anonymouse;

public class InnerClass {
	int i;
	public InnerClass() {
		System.out.println("바깥클래스 생성자");
	}
	public void outMethod() {
		System.out.println("바깥 클래스의 메서드");
	}
	
		//--------------------- inner class start
		public class Inner{
			int j;
			public Inner() {
				System.out.println("안쪽 클래스의 생성자");
			}
			public void inMethod() {
				System.out.println("안쪽클래스의 생성자");
				System.out.println("안쪽 메서드 바깥변수" + i);
			
			}
		} //---------------------inner class end
	
	public static void main(String[] args) {
		InnerClass t1 = new InnerClass();
		t1.i = 10;
		// t1.j = 10; 안쪽 클래스의 변수는 직접 사용이 불가능
		// t1.inMethod(); 안쪽 클래스의 메서드는 직접 사용이 불가능
		// 바깥 클래스에서 안쪽클래스의 자원을 사용하려면 안쪽 클래스를 객체화 하여 사용
		InnerClass.Inner in = t1.new Inner();
		//안쪽 클래스의 자원 사용
		in.j = 100;
		in.inMethod();
	} //main
} // class

2. Nested Class(중첩 클래스)

 - 안쪽 클래스를 static 변수처럼 사용이 가능합니다.

 - 안쪽 클래스 정의시 static 붙여서 정의 합니다.

 - 외부 클래스 instance 영역은 사용할 수 없습니다.

 - 안쪽 클래스는 객체화하지 않고 사용합니다.(static)

package ClassInner_nested_local_anonymouse;

public class NestedClass {
	int i;
	static int j;
	public NestedClass() {
		System.out.println("외부클래스의 생성자");
	}
	public void outMethod() {
		System.out.println("인스턴스메서드");
	}
	public static void outStaticMethod() {
		System.out.println("외부 클래스의 스태틱메서드");
	}
	
	// --------------중첩 클래스 시작
	static class Nested{
		static int n;
		public Nested() {
			System.out.println("안쪽 생성자");
		}
		public static void inMethod() {
			// i= 10; //static영역에서는 instance 영역의 자원을 직접 사용할 수 없음.
			System.out.println("안쪽 메서드");
			NestedClass.j=10;
			//outMethod(); //static영역에서는 instance영역의 자원을 직접 사용할 수 없음.
			NestedClass.outStaticMethod();
		}//inMethod
	}//class
	//--------------------중첩클래스 end
	
	public static void main(String[] args) {
		Nested.n=10;
		Nested.inMethod();
	}
}

3. 지역 클래스 (Local Class)

 - 메소드 안에서 클래스를 정의할 때

 - 메소드 내부에서만 지역변수처럼 클래스를 사용할 때

 - 지역 클래스는 instance 변수, method를 사용할 수 있지만 지역변수, parameter는 final이 붙은 것만 사용가능.

 - 메소드 바깥에서 사용할 수 없다. (지역변수 처럼)

package ClassInner_nested_local_anonymouse;

public class LocalClass {
	int out_i;
	public LocalClass() {
		System.out.println("바깥 클래스 생성자");
	}
	public void method(int param_i, final int param_j) {
		int local_i= 0;
		final int local_j = 0;
		//지역클래스 시작
		
		class Local{
			int i;
			public Local() {
				System.out.println("지역 클래스의 생성자");
			}
			public void localMethod() {
				System.out.println("외부 클래스의 인스턴스변수= "+out_i);
				
				//final이 붙어 있지 않은 파라미터는 지역클래스에서 사용할 수 없다.
				//system.out.println("파라미터 param_i="+param_i);
				System.out.println("파라미터 param_j= "+param_j);
				
				//final이 붙어 있지 않은 클래스는 지역클래스에서 사용할 수 없다.
				//System.out.println("지역변수 local_i"+local_i);
				System.out.println("지역변수 local_j= "+local_j);
				System.out.println("지역클래스의 메소드");
			}
		}
		Local local = new Local();
		local.i=10;
		local.localMethod();
	}
	public static void main(String[] args) {
		LocalClass lc = new LocalClass();
		lc.method(100, 200);
	}
}

4. 익명 클래스

Test t1 = new Test(){ 
	public int num = 10;
	@Override 
	public int getNum(){ 
	return this.num; 
	} 
};

익명 클래스 참조 : https://mommoo.tistory.com/16

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형
public class test{

static int pi; 	//클래스 변수

int number;		//인스턴스 변수

void method(){
	int lv;		//지역 변수
    }
} 

클래스 변수의 용도

1. 인스턴스에 따라 변하지 않는 값이 필요한 경우.

2. 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우

3. 값의 변경 사항을 모든 인스턴스가 공유해야 될 경우.

 

클래스 메소드는 인스턴스 변수에 접근할 수 없다.

인스턴트 메소드는 클래스 변수에 접근할 수 있다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. 오버로딩과 다형성

서로 다른 동작 방법을 가지고 있기 때문에 오버로딩은 다형성의 한 예라고 할 수 있다.

package 다형성;


class a{
	public void a(int param) {
		System.out.println("숫자출력");
		System.out.println(param);
	}
	public void a(String param) {
		System.out.println("문자 출력");
		System.out.println(param);
	}
		
}

public class overloading_polymorphism {
	public static void main(String[] args) {
		a a = new a();
		a.a(3);
		a.a("삼");
	}
}

 

2. 클래스와 다형성

package polymorphism;

class ClassA{
	public String x() {return "ClassA.x";}
}
class ClassB extends ClassA{
	public String x() {return "ClassB.x";}
	public String y() {return "ClassB.y";}
}
public class class_ploymorphism {
public static void main(String[] args) {
	ClassA obj = new ClassB();
	System.out.println(obj.x());
//	System.out.println(obj.y());
}
}
package org.opentutorials.javatutorials.polymorphism;
abstract class Calculator{
    int left, right;
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    } 
    int _sum() {
        return this.left + this.right;
    }
    public abstract void sum();  
    public abstract void avg();
    public void run(){
        sum();
        avg();
    }
}
class CalculatorDecoPlus extends Calculator {
    public void sum(){
        System.out.println("+ sum :"+_sum());
    }
    public void avg(){
        System.out.println("+ avg :"+(this.left+this.right)/2);
    }
} 
class CalculatorDecoMinus extends Calculator {
    public void sum(){
        System.out.println("- sum :"+_sum());
    }
    public void avg(){
        System.out.println("- avg :"+(this.left+this.right)/2);
    }
} 
public class CalculatorDemo {
    public static void execute(Calculator cal){
        System.out.println("실행결과");
        cal.run();
    }
    public static void main(String[] args) { 
        Calculator c1 = new CalculatorDecoPlus();
        c1.setOprands(10, 20);
         
        Calculator c2 = new CalculatorDecoMinus();
        c2.setOprands(10, 20);
         
        execute(c1);
        execute(c2);
    }
}

 

3. 인터페이스와 다형성

package org.opentutorials.javatutorials.polymorphism;
 
interface father{}
interface mother{}
interface programmer{
    public void coding();
}
interface believer{}
class Steve implements father, programmer, believer{
    public void coding(){
        System.out.println("fast");
    }
}
class Rachel implements mother, programmer{
    public void coding(){
        System.out.println("elegance");
    }
}
public class Workspace{
    public static void main(String[] args){
        programmer employee1 = new Steve();
        programmer employee2 = new Rachel();
         
        employee1.coding();
        employee2.coding();
    }
}

 

참조: 생활코딩 다형성

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

트랜잭션이란? 

  2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송하고 이 과정에서 어떠한 에러(Exceptioin)가 발생할 경우 자동으로 모든 과정을 원래 상태로 돌려놓는 것입니다. 프로시져도 같은 맥락이긴 하지만 차이점은 로직을 JAVA에서 처리하는게 아니라 DB상에서 처리한다는 것입니다. 과거에 트랜잭션 구현이 어렵고 프로시져 구현이 더 간편했을 때만 하더라도 많은 웹어플리케이션이 비지니스 로직을 JAVA가 아니라 DB에서 처리하는게 유행했던 시절도 있었습니다.

 

간단하게 말하자면!

 

  데이터의 무결성으로 인하여 데이터 작업 시에 문제가 생기면, 데이터 작업을 하기 이전 시점으로 모든 데이터를 원상복구 하는 것을 말합니다. 즉, 모두 실행되거나 모두 실행되지 않거나를 뜻한다.

 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,