이클립스 폰트 설정하는 방법이다.





이클립스 윗 메뉴를 보면 아래와 같이 구성되어 있다.





아래와 같이 window 탭으로 이동한다.





Preferences탭을 누르면 아래와 같이 프레임이 나타난다.






General 탭에서 Colors nad Fonts 를 클릭한 후 오른쪽 메뉴에서 Basic 폴더 안에 맨아래의 Text Font 메뉴를 클릭한다.


후에 Edit 버튼을 누른다. 아래와 같은 프레임이 나타날 것이다.  마음에 드는 폰트종류나 폰트 크기를 설정해주면 되겠다.









'IDE' 카테고리의 다른 글

[IntelliJ] IDEA DB Client 사용하기  (0) 2019.11.07
[IntelliJ] 인텔리J에 이클립스 Tab 기능 설정하기.  (2) 2018.12.23

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘 포스팅 할 내용은 자바의 foreach문(향샹된 for문으로 부르기도 한다.)에 대해 알아볼 것이다.


보통 for문을 사용할땐 아래와 같이 사용한다.


for(int i=0; i<array.size(); i++){

System.out.println(array.get(i));

}


위와 같이 for문은 초기값 ; 조건식 ; 증감식 을 통해서 사용한다.


보통 조건식을 array.size()를 사용함으로써, array의 크기가 바뀌더라도 알아서 적용하게끔 쓴다.


하지만, 조건식에 array.size()를 사용할 시, for문이 돌때마다 size를 호출 한다는 단점이 있다.


데이터가 적을땐 문제가 안되지만, 만약 데이터가 많다고 가정해보면 문제가 될 수 도 있다.


따라서 아래와 같이 사용하기도 한다.


for(int i=0,size = array.size(); i<size; i++){

System.out.println(array.get(i));

}


초기값 세팅에 size를 미리 구해서 for문이 돌때마다 array.size() 메서드의 사용을 피한 것이다.


위의 예시에선 문제가 없지만, 아래와 같은 경우에 또 문제가 생길 수 있다.


for(int i=0,size = array.size(); i<size; i++){

System.out.println(array.get(i));

System.out.println(array.get(i));

}


무엇이 문제가 될 수 있을까? 답은 array.get(i)를 두번 호출 해야하는 상황에서 생길 수 있다.


단순히 원하는건 array.get(i)가 리턴해주는 String 값인데, arrayList를 쓸때없이 두번 접근 하고 있다.


이러한 문제를 해결하기 위해선 보통 아래와 같이 코딩한다.


for(int i=0,size = array.size(); i<size; i++){

String tempValue = array.get(i);

System.out.println(tempValue);

System.out.println(tempValue);

}


위의 예제에서는 String 변수 tempValue에 array.get(i) 값을 미리 저장시켜


array호출을 두번 하지 않고 String Value만을 프린트하게 한다.  이렇게 함으로써 array를 한번만 접근할 수 있다.


지금까지 for문 사용법에 변천사를 쭉 보아왔는데, 이러한 것들을 foreach문 쓰면 편하다.


for(String tempValue : array){

System.out.println(tempValue);

System.out.println(tempValue);

} 


간단하지 않은가! 이렇게만 작성해주면 위에서 말했던 문제점들이 전부 해결된다.


특이한점은 초기값 세팅에 size를 미리 구할때도 size()메서드를 한번은 호출한다.


하지만 foreach문은 size()메서드를 한번도 안부른다는 점이다.


(주관적인 생각은 array를 하나씩 get 하면서 끝까지 index가 끝까지 도달했을때,


끝나게끔 코딩을 한것이 아닌가 생각이든다.)


하지만 위의 예제에서 혹시 index값을 구하고 싶은경우가 있을것이다.


그런경우는 아래와 같이 코딩하면 될것이다.


int index = 0;

for(String tempValue : array){

System.out.println("Index : " + index++);

System.out.println(tempValue);

System.out.println(tempValue);

} 


foreach문은 JDK 5.0 이상부터 지원하는 문법이다.


만약 일반 for문이랑 차이점을 모른다면 잘 안쓸 문법이다.


하지만 위에서 설명한 이유를 읽어보고 잘 이해를 했다면


충분히 써 볼 가치가 있다고 느낄 것이다.






'Java' 카테고리의 다른 글

JAVA - ArrayList에서 배열로, 배열에서 ArrayList로  (2) 2016.04.25
JAVA BufferedReader readLine에 관하여.  (2) 2016.04.09
JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA - 익명클래스(Anonymous class)란?  (3) 2016.01.20

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘 포스팅 할 내용은 Static에 대해 알아 볼 것이다.


프로그래밍 용어로써의 Static은 정적의,고정의 뜻으로 생각하면 된다.


자바에서는 어떻게 쓰이나 아래의 설명을 보자.


먼저, 자바는 Statically Type Variable (정적 타입 변수)를 가진다.


예를 들어, 변수를 사용할때 아래와 같이 사용한다.


int a = 1;


int라는 자료형을 미리 정해줌으로써 a 변수는 정수 실제 데이터 밖에 싣지 못한다.


미리 자료형을 고정하므로 Static개념이다.


많은 스크립트 언어가 윗 개념과의 반대인 Dynamically Type Variable(동적 타입 변수)를 가진다.


예를 들어, 자바스크립트에서는 아래와 같이 변수를 사용한다.


var a = 1;


여기서는 var(Variable의 약자) 이라는 변수 표시와 함께 변수명 a를 선언 했을때, 실제데이터의 종류에 따라 동적으로


타입이 결정된다. 윗 예시는 실제데이터가 정수형 이므로 a의 자료형은 정수형이 되는것이다. 



두번째로, 자바는 static 예약어를 제공한다. 윗 개념에서 살펴 보았드시, Static은 정적의 고정의 뜻으로 생각하면 된다. 아래의 예시를 보자.


public class StaticTest{


 static public int a = 1;


 public int b = 3;


 static public void add(){

 }

}


윗 예시는 int 형 변수 a 를 static 예악어를 통해 고정시켜 놓았다. 어딜 고정 시켜 놓은 것 일까?


답은 메모리에 미리 고정시켜 놓은것이다.


클래스 안의 변수를 사용하기 위해서는 인스턴스를 생성해야 한다. 

ex)

 StaticTest st = new StaticTest(); 

 st.a;

 st.add; 

<인스턴스 변수. 변수 or 메서드>


하지만, static 예약어를 사용하면 인스턴스를 생성하기 전에 미리 메모리에 올려놔 고정시킨다.


이렇게 되면 무슨 특징이 있을까? 아래와 같은 특징이 있다.




1. 인스턴스를 생성한 후 이용가능 하던 변수가 static 예약어를 사용함으로써, 미리 메모리에 올라가 있으므로, 인스턴스 생성 없이 바로 사용가능하다.


  StaticTest.a; 

  StaticTest.add();  

<클래스.변수 or 메서드>


2. StaticTest 의 인스턴스를 몇개를 생성하든 a의 변수는 이미 메모리에 올라가 있으므로,

  

  인스턴스 마다 변수 a가 생기는 것이 아니라 메모리에 미리 올라가 있던 변수 a를 공유한다. 


  따라서 static 예약어를 사용한 변수는 공유변수 라고도 불린다.


  변수a를 공유하므로 변수a크기 만큼 메모리를 아낄 수 도 있다. 


  메서드도 똑같이 생각하면 된다.


3. 만약 변수b를 static 메서드 add안에다가 사용하면 오류가 발생한다. 

  

  이유는 int b는 StaticTest의 인스턴스가 생성되어야 쓸수 있는 멤버변수지만,

  

  static public void add()는 인스턴스가 생기길 기다려주지 않고 바로 메모리에 올라가기 때문에 


  StaticTest안에 일반 멤버변수 b는 쓰지 못한다.



여기까지가 준비한 포스팅 내용이다. 프로그래밍 개념으로서의 static은 고정하다, 정적이다. 라는 뜻이므로


자바 뿐만 아니라 static 개념이 나오는 모든 프로그래밍을 윗 개념으로 이해하면 좋을 것 이다.





'Java' 카테고리의 다른 글

JAVA BufferedReader readLine에 관하여.  (2) 2016.04.09
Java foreach문(향상된 for문)  (0) 2016.03.30
자바 enum 열거형  (0) 2016.01.27
JAVA - 익명클래스(Anonymous class)란?  (3) 2016.01.20
JAVA의 삼항연산자  (4) 2015.12.11

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘은 자바의 익명클래스(Anonymous Class) 혹 무명클래스 에 관해 포스팅을 할 것이다.


익명클래스는 말 그대로 익명의 성질을 가진 클래스라는 뜻이다. 즉 이름이 없는 클래스라고 불리우는데,


'이름이 없는' 이란 의미를 잘 생각해봐야 한다. 아래의 예시를 보자.


public class Test{
    private int num = 1;
    public int getNum(){
        return this.num;
    }
    public void setNum(int num){
        this.num = num;
    }
}

Test란 클래스이다. 멤버변수 num 을 private로 접근을 제어한 후,


게터와 세터로 멤버변수를 접근할 수 있도록 만들었다.



    Test t1 = new Test();

평상시 처럼 인스턴스를 사용할땐 위와 같이 사용한다. 


여기서의 인스턴스 (new Test())는 클래스 이름 'Test'라고 불리운다.


즉 우리가 노말하게 쓰는 인스턴스는 '이름이 있는 클래스' 인것이다.


그렇다면 '이름이 없는 클래스'는 무엇을 의미하는 것 일까? 


위에서 설명한 이름이 있는 클래스의 반대 경우이다. 


즉 Test와 같은 클래스이름 자체가 없는 클래스를 의미한다. 아래의 예시를 보자.


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

바로 위의 소스코드랑은 비슷하면서도 다른점이 있다. 다른점은 인스턴스 옆에 블럭이 있다는 점이겠다.


언뜻 보면 new Test()라는 소스코드 때문에 이 인스턴스는 Test의 이름을 가질 것 같지만,


결코 아니다. 이 인스턴스야 말로 정말 어떠한 이름도 없는 인스턴스 인 것이다.


해당 주장이 맞는 주장인지 근거를 제시해보겠다.


먼저, 해당 인스턴스의 블럭안에는 @Override 어노테이션 주석이 존재한다. 즉, 원래의 Test 클래스에


존재하던 getNum 메서드가 아닌 재정의된 메서드 인점,


또한, 이 인스턴스의 this.num을 출력했을 경우 10이 나온다는 점이다. 


오히려 이 인스턴스는 Test 클래스를 상속받은 클래스라고 바꿔 말해도 될 것이다. 


평소에 자바언어를 사용하는 사용자라면, 상속을 어떻게 쓰는지 알 것이다.


클래스명 extends 상속받을 클래스     구조로 사용하는데 위의 소스 코드는 클래스명이 존재 하지 않고


무명의 어떠한 클래스가 부모클래스로 부터(Test) 상속을 받은 인스턴스 인 것이다.


즉 이름이 없으므로 생성자를 선언 할 수도 없는것이다.


왜 이름이 없는 클래스라고 불리우는지 감이 잡히는가?



익명클래스에 대해 간단하게 알아보았다. 현재 함수형 프로그래밍이 유행하고 있다.


자바에서는 함수를 일급객체로 취급하지 못하지만, 위에서와 같이 익명클래스를 사용하면


메서드 자체는 못넘기되 메서드를 감싼 익명클래스를 넘길 수 는 있다. 


즉, 익명클래스로 자바도 함수형 프로그래밍 흉내를 낼 수 있다고 생각한다.



'Java' 카테고리의 다른 글

JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA의 삼항연산자  (4) 2015.12.11
JAVA의 생성자 (2)  (2) 2015.11.17
JAVA의 생성자 (1)  (0) 2015.11.12

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee



제목은 자바의 삼항연산자라고 적었지만.


이 삼항연산자는 언어 불문하고 자주 쓰이는 코드다.


삼항연산자를 쓰는 이유는 딱 하나이다. 어렵지 않은 알고리즘의 다수줄의 코드를


가독성 좋게 한 두줄로 바꿔줄 수 있기 때문이다.


아래의 예시를 보자.



if(a>b){
		result = 111;
	}else{
		result = 222;
	}


어렵지 않은 코드이다. a가 클시 result에는 111이 들어가고 b가 클시, result에는 222가 들어간다.


문제가 뭐냐면... 귀찮다 분명 어렵지 않은 알고리즘이지만, 


다른 코드들이랑 쓰다보면 눈에 안들어 올 것이다.


위코드를 아래와 같이 바꿀 수 있다.



result = (a>b)?111:222;


이런식으로 쓴다. result의 값은 위 위의 코드와 동일하게 들어간다. 


변수 = (참이나 거짓이나오는 부울린) ? (참일경우 들어가는 값 ) : (거짓일 경우 들어가는 값);


위의 경우는 int형 변수 result를 썻지만. 좀더 응용하면 여러 변수들을 상황에 맞게 쓸 수 있다.


예를들어, 자바의 JFrame 에서 visible을 컨트롤 한다고 생각해보자.



frame.setVisble((frame.isVisible())?false:true);



이해가 가는가? 삼항연산자의 리턴값을 변수에 넣지 않고 바로 setVisible안에 넣은것이다.


따라서 저 코드는 visible 이 트루 일때는 frame을 안보이게하고. 


visible이 거짓 일때는 frame 을 다시보이게 하는 코드라 할 수 있겠다.




 

 

'Java' 카테고리의 다른 글

JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA - 익명클래스(Anonymous class)란?  (3) 2016.01.20
JAVA의 생성자 (2)  (2) 2015.11.17
JAVA의 생성자 (1)  (0) 2015.11.12

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee



mommoo.tistiory.com/3 ( Java의 생성자 (1) )



저번 포스팅의 2탄이다. 1탄은 위의 경로로 가서 보면 된다.


저번 포스팅의 예제를 사용해 생성자의 사용법에 대해 설명하겠다. 


public class Test{
        
	public int num;
	public String str;

	public Test(int num,String str){
		this.num = num;
		this.str = str;
	}

	public void print(){
		System.out.println("num은"+num+"입니다. , str은"+str+"입니다.");
	}

	public static void main(String str[]){
		Test test = new Test(10,"홍길동");
		new Test(9,"활빈당");
	}
}

main 함수에서 new 키워드를 통해 Test클래스를 사용했다. 생성자 함수가 2개의 매개변수를 요구 하므로


Test클래스를 생성할 때, 두가지 정보를 넣었다.(이름,나이)


main 함수안에 첫번째 줄은 test 라는 참조변수에 생성한 Test클래스의 정보를 담았고


두번째 줄은 Test클래스를 생성만 할 뿐 변수에 담지는 않았다.


결과적으로 말하자면, 둘다 new 키워드를 통해 클래스를 호출 했고 둘다 생성자( public void Test(int num,String str) )가


실행이 된다. 거꾸로 말하자면, new 키워드를 통해 클래스를 호출만 하면 생성자는 무조건 실행이 된다는 것이다.


따라서, 생성자는 프로그래머가 생각하기에, 자신이 만든 프로그램(클래스)이 메모리에 적재 될 시,


반드시 해야할 일 을 코드로 작성하는 공간이라 생각하면 되겠다.


클래스 안에는 반드시 생성자가 정의 되어야 한다. 하지만 아래와 같은 코드를 보자.



public class Test{

	public int num;
	public String str;

	public static void main(String str[]){
		Test test = new Test();
	}

위의 클래스는 생성자가 보이지 않는다.


분명히 클래스는 생성자가 존재해야 한다고 말했지만, 컴파일 오류가 발생하지 않고, 실행도 잘된다.


이유가 무엇일까? 


정답은 사용자가 생성자를 따로 적지 않았을 시, 자바 컴파일러가 우리가 만든 Test 클래스에


Test(){}; 라는 생성자를 (디폴트 생성자) 저절로 넣어준다. 


즉 결국엔 생성자가 있는것 처럼 된것이다.


그렇다면, 우리가 매개변수가 있는 생성자를 따로 적어 주었을시, 자바 컴파일러가 Test(){}라는 디폴트 생성자를 넣어줄까?


답은 아니오다. 우리가 따로 생성자를 적어주었을시, 우리가 적은 생성자를 메인 생성자로 판단하고 디폴트 생성자를 넣어주지 않는다.


아래의 코드는 오류가 발생한다.

public class Test{ public int num; public String str; public Test(int num){ this.num = num; } public static void main(String str[]){ Test test = new Test();//매개변수가 하나 필요하다... }

그렇다면, 위의 코드의 오류를 고치는 방법은 무엇이겠는가? 제일 간단한 방법은


Test클래스를 호출할때 매개변수를 하나 입력하는 것이다.


다른 방법도 있다. 혹, 오버로딩을 아는 사람이라면, 쉽게 이해 할 수 있을 것이다.


생성자를 하나더 만드는 것이다.


public class Test{ public int num; public String str; public Test(){}; public Test(int num){ this.num = num; } public static void main(String str[]){ Test test = new Test(); }


이렇게 생성자를 하나 더 만들어 주면 된다.


main에서 Test클래스를 생성할 때, 매개변수가 없는 클래스를 생성 하였으므로 매개변수가 없는 생성자를 찾아가 클래스를  생성한다.



여기까지가 준비한 내용이다. 


다른 개념을 추가적으로 덧 붙여 생성자를 설명하면 말 할 내용은 더 길어진다.(예를들어, 상속) 


때문에, 생성자의 모든 부분을 다루진 않았지만 어느정도 생성자에 관해 알게되었을 것이라고 예상한다.





'Java' 카테고리의 다른 글

JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA - 익명클래스(Anonymous class)란?  (3) 2016.01.20
JAVA의 삼항연산자  (4) 2015.12.11
JAVA의 생성자 (1)  (0) 2015.11.12

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts