728x90

 

1.캐멜 케이스 (Camel Case)

String camelCase;

첫글자는 소문자지만 중간 단어들의 첫음절을 대문자로 하여 각 단어를 알아보기 쉽게한다

낙타(camel) 혹같이 튀어나와보인다 해서 캐멀 케이스

 

2.스네이크 케이스(Snake Case)

단어 사이에 언더바(_)로 구분해주는데 뱀이 구불구불 기어가는 모양 같다고 하여 스네이크 케이스라 부른다

String snake_case;

 

3.파스칼 케이스(pascal case)

String PascalCase;

첫글자부터 대문자로해서 단어마다 대문자로 작명하는 경우를 파스칼 언어의 표기법과 비슷해 보인다하여 파스칼 케이스라 부른다

728x90
반응형
728x90

 

자바 jdk 버젼 관련해서 실수로 최신 버젼을 깔았는데

호환성과 안정성 등 필요에 따라 구버젼을 사용해야할 때가 있을 것이다

혹은 버젼을 업그레이드 하고 싶던지 다운그레이드 하고 싶던지 

 

openjdk버젼이 다양한데

설치형 오픈 jdk가 있고 무설치로 경로 지정만 잘해주면 사용할 수 있는 두가지가 있다

 

 

open JDK 삭제

무설치형은 경로에 있는 파일을 제거하고 원하는 버젼으로 새로 세팅해주면 되고, 설치형은 아래와 같다

1)제거툴로 제거 하는 방법

https://www.java.com/ko/download/uninstalltool.jsp

2)프로그램 추가/제거에서 제거하는 방법

1)2) 둘 중에 하나를 하게되면 설치형은 제거가 된다

 

자바가 잘 지워졌는지or자바 버젼 확인 하는 방법

1)윈도우키+R을 눌러서 CMD치고 실행시킨다

2)cmd에 java -version이라고 친다

없으면 없다고 나오던가 현재 구동되는 runtime 버젼이 뜰 것이다

 

필자는 자바17최신버젼과 이클립스도 21-12 최신버젼에서 구버젼 1.8.0과 이클립스 20-03 설치(아래 링크)로 바꿨다 

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html

 

Downloads for Amazon Corretto 8 - Amazon Corretto

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

https://www.eclipse.org/downloads/packages/release/2020-03/r

 

2020-03 R | Eclipse Packages

442 MB 6,634 DOWNLOADS The Modeling package provides tools and runtimes for building model-based applications. You can use it to graphically design domain models, to leverage those models at design time by creating and editing dynamic instances, to collabo

www.eclipse.org

 

 

자바 버젼 설치 후 이클립스에 적용시키기

1. [window] - [Preferences] - [java탭] - [Installed JREs]

2. [window] - [Preferences] - [java탭] - [Complier] 

 

1. [window] - [Preferences] - [java탭] - [Installed JREs]

[window] - [Preferences] - [java탭] - [Complier] 까지 들어가서 아래 화면처럼 Add 클릭

가운데 네모 박스는 add 후에 추가되는 자바 버젼을 체크해야한다. 저는 이미 있으니 패스

 

standard VM에 체크하고 next

 

 

디렉토리 누르고 막 설치했던자바 버젼이 깔려있는 곳을 지정해주면 된다.

 

추가 되고나면, 아래처럼 체크해주고 나머지는 remove해주자

(언제든 다른 버젼 추가가능)

 

 

2.[window] - [Preferences] - [java탭] - [Complier] 

[window] - [Preferences] - [java탭] - [Complier] 까지 들어가서 

Compiler compliance level에서 쓸려는 자바 버젼을 지정해준다

그 아래 use default compliance settings은 기본값으로 저 버젼에 맞춰준다는 것이니 체크해두자

 

 

 


 

 

 이클립스에서 기존에 사용하던 프로젝트 파일의 버젼 설정

 

위의 세팅으로 새로 생성되는 프로젝트들은 새로 설치한 버젼으로 만들어지지만 이전 버젼들은 따로 설정해야줘야한다

 

1.[사용할려는 프로젝트 위에서 우클릭] - [Properties] - [Java Build Path]

2.[사용할려는 프로젝트 위에서 우클릭] - [Properties] - [Java Compiler]

 

1.[사용할려는 프로젝트 위에서 우클릭] - [Properties] - [Java Build Path]

그림 중앙의 파일은 add 후 생긴 파일이고, Add library를 눌러주자

 

JRE System Library 선택

 

Workspace default JRE 선택

아까 설치하고 기본값으로 세팅해준 그 자바 버젼을 쓴다는 의미이다

 

여기서도 쓸려는 버젼으로 변경하고 아래 apply 클릭

 

 

2.[사용할려는 프로젝트 위에서 우클릭] - [Properties] - [Java Compiler]

여기 Java Complier에서도 1.8 잘되어있는지 체크

 

 

이클립스 인코딩 세팅

인코딩 방식 UTF-8로 변환해두기

안하면 파일 다 깨져서 난리남...

https://parkjye.tistory.com/35

 

728x90
반응형
728x90

 

 

728x90
반응형
728x90

<클래스와 인스턴스 & 객체지향 이후 공부할 것>

  1. 상속(inheritance)
  2. 인터페이스(Interface)
  3. 패키지(package)

 

1.상속inheritance

class Parent{
		public void method1() {
			// ...
		}
}

Q.위에서 저 클래스를 직접 수정할 수 없거나 변경하지 말아야하는 상황에서 method2()를 추가하고 싶다면?

A.저 클래스 전체를 카피해서 이름 다른 클래스로 해서 method2()를 추가

이 방법은 class parent의 method1의 코드 개선, 버그 해결 등을 하게 되면 이 method1을 카피한 수많은 모든 코드를 다 수정해야함. 일 산더미...?

 

이 문제 개선을 위해 자바에서 제공하는 기능이 상속

extends를 붙여서 상속표시

class Child extends Parent{
		public void method2() {
				// ... 
		}
}

Child라는 클래스에는 실제로는 method1이 구현되어 있지 않지만, 상속 받았기에 class Parent에 있기에 class Child에서도 사용 가능해짐

 - class parent 코드가 수정되면, 동시에 다른 자식 클래스에도 다 같이 수정된다

 

 

2.인터페이스(Interface)

interface contract {
		public String method1(String param);
		public int method2(int param);
}

원래 인터페이스에는 메소드의 이름, 파라미터와 리턴값의 형식은 적으나 실제 내용은 적지 않는다

 

class Concreate1 implements Contract {

}

위 코드 의미

Concreate1 이라는 클래스Contract 라는 인터페이스에 적혀있는 메소드들의 형식을 구현했다 or 구현해야한다는 의미

이 상태로 Concreate1 클래스를 컴파일하면 컴파일조차 안된다

 - 규칙위반 때문

 - Contract에 적혀 있는 메소드들을 정의해야한다는 규칙을 어겼기 때문

 

implements에 contract를 적어놓게 되면 class Concreate1은 interface의 contract적혀있는 형태의 메소드구체적으로 구현해야하는 책임을 갖는다

class Concreate1 implements Contract{
		public String method1(String param) {
				return "foo";
		}
		public int method2(int param) {
				return 1;
		}
}
// 클래스 콘크리트1 안에 내용이 메소드1의 내용으로 채워짐

 

 

마찬가지로 class Concreate2

Concreate1Concreate2서로 다른 클래스이지만 확신할 수 있는 것은,

이 클래스들은 반드시 contract에 약속되어 있는 정의되어있는 형태의 멤버들을 구현하고 있을 것이라는 것. 일종의 무언의 약속

 

3.패키지(package)

클래스 이름은 같지만 기능이 다른 두 클래스가 존재할 수 있다

ex)서로 다른 디렉토리에 있는 경우, 한 컴퓨터 안에 같은 이름의 파일이 여러개 존재할 수 있는 것

 

클래스도 서로 다른 패키지에 묶여있으면 같은 이름의 클래스가 공존 가능

많아진 클래스정리정돈의 도구로써 사용되는 것이 패키지

패키지보다 더 큰 정리정돈의 도구는 자바에서는 없다

 

 

 

 

 

728x90
반응형
728x90

어떨 때에 인스턴스를 쓰는게 좋을까?

<클래스화를 계속 써야할 상황>

1)공급가액 파라미터가 한번 세팅이 되고나서 내부적 상태가 바뀌지 않고 getVAT(), Total() 같은메소드들로 부가가치세, 총액 같은 값만 받으면 되는 간단한 상태면 클래스 사용하면 된다

또는

2)내부적인 상태가 한번 세팅이되면 여러 작업들이 끝나고 그 다음에 새로운 내부적인 상태가 변화가 오는 케이스에서도 클래스를 인스턴스화 시킬 필요는 없다고 본다

 

<인스턴스화를 써야할 상황>

그런데 클래스의 상태가 계속 바뀌어야하는 상황이라면?

ex) 공급가액(vauleOfSupply) 1만 세팅에서 2만,3만 등 경우의수가 엄청나게 많아지고 계속 바꿔가면서 써야한다면?

(즉, 클래스의 상태가 계속 바뀌어야하는 상태일 때는?)

Accounting08_2.valueOfSupply = 10000.0;		
System.out.println("Value of supply : " + Accounting.valueOfSupply);
System.out.println("VAT : " + Accounting.getVAT());
System.out.println("Total : " + Accounting.getTotal());

Accounting08_2.valueOfSupply = 20000.0;		
System.out.println("VAT : " + Accounting.getVAT());

Accounting08_2.valueOfSupply = 50000.0;		
System.out.println("VAT : " + Accounting.getVAT());

Accounting08_2.valueOfSupply = 900.0;		
System.out.println("Total : " + Accounting.getTotal());

 

공급가액(vauleOfSupply)이 하나가 아닌 내부적으로 수십개의 값들이 있고 계속 바꿔야한다면 버그 발생 확률 고위험

하나의 클래스여러 상태에서 돌려써서 버그발생 확률이 높아지게 되는 것

이럴 때 인스턴스화

독립된 인스턴스기에 상태별로 인스턴스를 만들어서 분리시키고 개별맞춤으로 관리가능

 

 

인스턴스가 생성될 때, 인스턴스가 내부적으로 꼭 가져야될 값(valueOfSupply)을 생성자 레벨에서 강제하고 싶다면?

A.아래의 코드 추가 및 인스턴스 생생코드 new Accounting(생성자); 생성자 인자부분 채우기

// 생성자가 호출될 때 인자를 매개변수로 전달하고 싶기에 public accounting() {}에 valueOfSupply를 넣는다
public Accounting08_3(double valueOfSupply) { 
		this.valueOfSupply = valueOfSupply;
}
// 생성자 인자 넣기
Accounting08_3 a1 = new Accounting08_3(**10000.0**);
        a1.valueOfSupply = 10000.0;

public accounting() {} 구현해주면 된다

생성자가 호출될 때 인자를 매개변수로 전달하고 싶기에 public accounting() {}에 valueOfSupply를 넣어주고 this.valueOfSupply 추가

 

 

위의 코드 this.valueOfSupply와 = valueOfSupply;가 가리키는 곳은?

this 키워드

 

 

 

전체코드

// OOP 8.2. 활용 - 인스턴스화

// 클래스화 to 인스턴스화

 
//class Accounting08_2{		// 클래스화
//
//    public static double valueOfSupply;		
//    public static double vatRate = 0.1;		
//    public static double getVAT() {
//        return valueOfSupply * vatRate;
//    }
//    public static double getTotal() {
//        return valueOfSupply + getVAT();
//    }
//}
//					클래스화
//      ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//					인스턴스화

class Accounting08_2{		// 인스턴스화
	// 인스턴스 소속, static 제거
	// static은 클래스소속이고 클래스가 인스턴스에 접근하면 에러나는건 어떤 인스턴스인지 모르기때문 a1?a2?
	public double valueOfSupply;		
	public static double vatRate = 0.1;	// 부가가치세는 어느 인스턴스나 10% 고정이기에 static설정이 유리	
	public double getVAT() {			// 인스턴스 만들 때마다 메모리 사용하지 않아도 되고, 
	    return valueOfSupply * vatRate; // vatRate파라미터는 얘 하나로 조절 가능해서 유지보수 용이
	}
	public double getTotal() {
	    return valueOfSupply + getVAT();
	}
}

public class OOP08_2 {
	public static void main(String[] args) {		

//        Accounting08_2.valueOfSupply = 10000.0;		
//        System.out.println("Value of supply : " + Accounting.valueOfSupply);
//        System.out.println("VAT : " + Accounting.getVAT());
//        System.out.println("Total : " + Accounting.getTotal());
//        
//        Accounting08_2.valueOfSupply = 20000.0;		
//        System.out.println("VAT : " + Accounting.getVAT());
//        
//        Accounting08_2.valueOfSupply = 50000.0;		
//        System.out.println("VAT : " + Accounting.getVAT());
//        
//        Accounting08_2.valueOfSupply = 900.0;		
//        System.out.println("Total : " + Accounting.getTotal());
    
				Accounting08_2 a1 = new Accounting08_2();
		    a1.valueOfSupply = 10000.0;
		    
		    Accounting08_2 a2 = new Accounting08_2();
		    a2.valueOfSupply = 20000.0;
		    
		    System.out.println("Value of supply : " + a1.valueOfSupply);
		    System.out.println("Value of supply : " + a2.valueOfSupply);
		    
		    System.out.println("VAT : " + a1.getVAT());
		    System.out.println("VAT : " + a2.getVAT());
		    
		    System.out.println("Total : " + a1.getTotal());
		    System.out.println("Total : " + a2.getTotal());    
	}
}
728x90
반응형

+ Recent posts