반응형

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

 

반응형
블로그 이미지

꽃꽂이하는개발자

,

GIT CLI #4 Clone

2020/git 2020. 3. 26. 17:45
반응형

원격 저장소를 내 컴퓨터에 받아오기 : 클론(Clone)

 

to do list

1. 내 컴퓨터에 새로운 폴더를 만들고 GitHub의 원한느 저장소 받아오기.

(git clone 주소)

2. 새로운 파일 생성 후 add -> commit -> push

3. GitHub에서 새 커밋 확인하기

4. 새로운 폴더가 업데이트 한 사항을 기존의 폴더에서 pull하기 

 

start

1. 새로운 폴더 만들기

2. 새로운 폴더에서 git bash 실행

3. git clone (주소)https://github.com/soulwine-it/GitHubTest.git .    (뒤에 . 을 넣으면 현재 폴더에서 풀고 .을 넣지 않으면 github 리파지토리를(폴더) 가져옴)

4. 받은 파일을 VScode로 열어서 수정해줌

5. git add . (변경 사항을 선택해줌)

6. git commit -m "수정사항" (선택 한 사항을 하나로 묶어줌)

6. git push origin master  (commit한 내용을 GitHub저장소에 올려줌)

7. GitHub에 commit 수 확인하면 1이 올라가 있음.

8. 기존의 폴더에서 git bash를 실행하고 git pull origin master

9. 새로운 폴더가 변경한 사항이 기존의 폴더에서 변경 되었는지 확인

 

 

반응형

'2020 > git' 카테고리의 다른 글

GIT CLI #3 git remote add / git push  (0) 2020.03.26
GIT CLI #2 git add / git commit  (0) 2020.03.26
GIT CLI #1 init  (0) 2020.03.26
github에서 repository 삭제하기  (0) 2020.01.14
블로그 이미지

꽃꽂이하는개발자

,
반응형

to do list

1. GitHub 사이트에서 프로젝트 저장소 만들기

2. 내 컴퓨터 프로젝트 폴더에 GitHub 저장소 주소 알려주기 ( git remote add)

3. 내 컴퓨터에 만들었던 묶음(commit한거) GitHub에 올리기 (git psuh)

 

origin : 깃 저장소 이름( 다른걸로 해도됨)

master : branch 이름

 

 

start

1. GitHub에서 new repository 생성

2. git remote add origin https://github.com/soulwine-it/GitHubTest.git  (생성한 주소)

3. git push origin master

 

반응형

'2020 > git' 카테고리의 다른 글

GIT CLI #4 Clone  (0) 2020.03.26
GIT CLI #2 git add / git commit  (0) 2020.03.26
GIT CLI #1 init  (0) 2020.03.26
github에서 repository 삭제하기  (0) 2020.01.14
블로그 이미지

꽃꽂이하는개발자

,
반응형

git add : 내가 변경한 파일 중 올리길 원하는 것을 선택

git commit -m "설명" : add한 것을 하나로 묶음(  하나의 버전 )

ex) commit은 하나의 버전이라고 생각하면 됩니다. page 1,2,3을 commit 하고 이후에 page2번을 수정하고 commit 합니다.

그런데 다시 되돌리고 싶다면? 처음에commit한 page 1,2,3을 commit했을 때로 돌아갈 수 있습니다.

 

git add README.md    : README.md 파일을 선택하기 원한다.

git commit -m "README.md 추가"   : add한걸 하나의 버전으로 만듬.

 

git add .  : 수정된 모든 파일 및 폴더를 선택함.

git commit -m "추가 시킨 묶음" : add . 에 선택한 걸 하나의 덩어리로 묶음

 

git log : commit 한 상태가 나옵니다.

반응형

'2020 > git' 카테고리의 다른 글

GIT CLI #4 Clone  (0) 2020.03.26
GIT CLI #3 git remote add / git push  (0) 2020.03.26
GIT CLI #1 init  (0) 2020.03.26
github에서 repository 삭제하기  (0) 2020.01.14
블로그 이미지

꽃꽂이하는개발자

,

GIT CLI #1 init

2020/git 2020. 3. 26. 16:54
반응형

cd

cd : 위치 이동

pwd: 현재 위치

ls: 현재 위치의 폴더 및 파일

ls -al :숨긴 파일까지 모두 표시

git init: 로컬 저장소 생성

 

반응형

'2020 > git' 카테고리의 다른 글

GIT CLI #4 Clone  (0) 2020.03.26
GIT CLI #3 git remote add / git push  (0) 2020.03.26
GIT CLI #2 git add / git commit  (0) 2020.03.26
github에서 repository 삭제하기  (0) 2020.01.14
블로그 이미지

꽃꽂이하는개발자

,
반응형
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에서 처리하는게 유행했던 시절도 있었습니다.

 

간단하게 말하자면!

 

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

 

 

반응형
블로그 이미지

꽃꽂이하는개발자

,