IntelliJ


JAVA 개발환경에는 크게 Eclipse와 jetBrain사에서 만든 IntelliJ, 그리고 NetBeans이 있습니다.
오늘은 그 중의 하나인 IntelliJ의 설치방법에 대해서 설명하겠습니다.


1. JetBrains의 홈페이지(https://www.jetbrains.com/)에 접속합니다.

   화면에서 IntelliJ IDEA를 선택합니다.





 2. Download를 선택합니다.




3. JVM&Andorid버전(IntelliJ)과, Web버전 2가지로 구분되어지는데, 사용하실 언어를 기준으로 설치해주시면 됩니다. 

   [ 저는 두 버전 다 설치하는 모습을 보여드리겠습니다. ]

   




4. Next를 눌러주세요.




5. IntelliJ를 설치할 경로를 지정해주시고 나서, NEXT를 눌러주세요.




6. Desktop일 경우, 32bit와 64bit를 구분하여서 설치해주세요.

   .java / .groovy / .kt 확장자 파일들에 대한 연결 여부를 선택합니다.

[Java를 설치하지 않은 경우]

 : Download and install JRE x86 by JetBrains 체크박스를 선택해주세요.

# JRE 나, JDK 1.8 버전 이상이 설치되어 있지 않은 경우에는 IntelliJ가 실행되지 않으니 유의해주세요!




7. Install를 눌러주시면 됩니다.










8. 설치하신 후, 바탕화면에서 IntelliJ를 선택하시면, 이전에 설치한 적이 있는 지, 

있으면 이전버전 설정을 등록할 건지에 대한 여부를 물어봅니다.




9. Privary Policy의 스크롤을 끝까지 내려면 Accept 버튼이 활성화 되니, 선택해주세요.




10. 소프트웨어나, 하드웨어를 설정 등을 공유하는 지에 대한 여부를 물어봅니다.




11. 원하시는 UI 테마를 선택하시면 됩니다.




여기까지는 WEB버전과 JVM&Android버전 모두 동일하게 이루어지는 과정이었습니다. 

아래에서부터는 두 버전이 나뉘어서 설명됩니다.







[JVM 및 Andorid 버전]





[WEB버전]






학생인증을 통해서, IntelliJ를 설치하는 방법을 다음에 포스팅하겠습니다!



'JAVA' 카테고리의 다른 글

final  (0) 2018.01.19
cmd로 클래스 실행  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
class간의 관계  (0) 2018.01.18
Class의 기본구조  (0) 2018.01.18

final은 문자 그대로 마지막을 나타낸다는 의미로,


java에서 변화를 방지하기 위해서 이용되는 키워드이다.


final을 사용하는 곳은 필드(field), 메소드(method), 그리고 클래스(class) 3군데 이다.





#필드(field)


필드에 final을 붙이게 되면, 마지막 변수로


한번 변수에 값을 저장하면, 저장한 값을 바꾸지 않겠다는 것을 의미한다.


그렇기 때문에, final을 붙은 필드는 선언과 동시에 초기화를 해주는 것을 원칙으로 한다.


만약 선언과 동시에 초기화를 하지 않을 시에는 필드에 기본값이 들어가게 되고,


개발자가 다른 곳에서 필드를 초기화하더라도 그 값은 바뀔 수가 없기 때문이다.





#메소드(method)


메소드에 final을 붙이게 되면 오버라이딩(overriding)을 금하겠다는 것을 의미한다.


 + [오버라이딩(overriding)]


   : 오버라이딩이라는 것은 내가 상속을 통해 부모클래스가 가지고 있는 메소드들을 물려받았을 때,


     자식이 부모의 메소드가 마음에 들지 않아, 메소드의 코드를 재정의 하는 것을 의미한다.


     예를 들자면, 부모가 자식에게 천지갑을 물려줬는데 자식이 그 지갑이 마음에 들지 않아


     그 지갑을 악어지갑으로 바꾸었다고 말할 수 있다.





#클래스(class)


클래스에 final을 붙히게 되면, 상속을 금지한다는 의미이다.


상속은 블로그 내의 '클래스의 관계'에서 자세히 설명하였듯이 클래스끼리 is ~a관계를 이루는 것을 의미하는 데, 


이 관계를 이용하지 못한다는 것은 has ~a관계, 즉 가져다가 쓰는 클래스로 밖에 이용하지 못한다는 것을 의미한다.


기본적으로 모든 클래스들은 is~a관계와 has~a관계가 모두 제공되기 때문에


상황에 맞추어 둘 중에 선택이 가능하나, final클래스는 오로지 has~a관계만 이용할 수 있다. 

'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
cmd로 클래스 실행  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
class간의 관계  (0) 2018.01.18
Class의 기본구조  (0) 2018.01.18

개발자에게는 자바(Java)를 손쉽게 이용할 수 있도록 이클립스(Eclipse)라는 툴을 제공되는데,


이 툴을 이용하지 않고도, 자바의 코딩이 가능하다.





[실행 순서]


1. 메모장에 자바의 코드를 적는다.


<Example Code>








2. 메모장의 메뉴중 파일을 클릭하여 다른 이름으로 저장을 선택한다.








3. 메모장에 적은 public class의 이름과 동일한 이름으로 저장을 하는데,


  저장하는 타입을 java로 해야한다. 




그러면 바탕화면(저장된 장소)에 Hello.java가 생성된다.









4. 파일탐색기를 들어가서 Hello.java가 저장된 장소를 찾아 장소의 위치를 Ctrl+C를 한다.








5. Cmd 창을 열어서  cd 를 적은 후 복사한 내용을 붙혀 적으면

 

Cmd창이 가리키고 있는 위치에서 내가 Hello.java를 만든 위치로 이동하게 된다.


[cd + 위치 : 적혀 있는 위치로 이동할 수 있게 해주는 명령어]






6. 위치를 이동한 후, javac Hello.java를 입력하는데,


이는 JAVA타입의 파일을 class로 변환시켜준다.


[javac + java파일명 : java 파일을 class로 변환시켜주는 명령어]



다 적고 Enter 키를 누르게 되면, java파일이 있던 위치에 같은 이름을 가진 class파일이 형성되게 된다.








7."  java 클래스명 "을 cmd창에 입력하게 되면, 


    아까 java파일에 적은 명령어가 실행되게 된다.


    [java + 클래스명 : 클래스를 실행시키는 명령어]



아까 Hello.java 파일에 Hello, Welcome을 출력하라는 함수를  적어 놓았기 때문에,


Hello, Welcome이 출력되는 것을 확인할 수가 있다. 






옛날에는 툴이 제공되지 않았기 때문에, 이런 방식을 이용하여 java를 작성하기도 했다.


그러나 지금 제공되고 있는 이클립스(Eclipse)와 다르게, java code상의 오류가 발생하게 되면, 


javac명령어로 클래스를 만들때 에러가 발생하여 만들기 전까지는 에러를 발견할 수 없으며,


이클립스와 같이 자동완성기능이 없기 때문에 코드를 일일히 손으로 쳐야 한다는 단점이 존재한다.




'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
final  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
class간의 관계  (0) 2018.01.18
Class의 기본구조  (0) 2018.01.18

외부에서 클래스를 이용할 때 


클래스 내부의 필드는 못 사용하게 하고, 메소드는 사용할 수 있게 설정할 수 있는 이유는


JAVA에 접근 지정자가 존재하기 때문이다.



접근 지정자는 외부에서 클래스를 접근할 때 접근 하는 범위를 한정하겠다는 의미이다.


접근 지정자는 좁은 범위에서부터 private, default, protected, public 4가지로 나뉘어져 있다.





#private


private으로 선언된 것은 외부에서 직접적인 사용이 불가능하다.


필드(field)의 경우에는 외부에서 내부의 필드를 직접이용할 수 없고.


메소도(method)의 경우에도 메소드를 직접 접근할 수 없게 된다.




private은 주로, 데이터의 손실과 소멸을 방지하기 위해, 


클래스(class)내부의 데이터의 직접적인 접근을 금할 때 사용된다.


클래스를 상속받을 때 부모클랙스의 모든 것을 자식클래스가 이용가능하다고 말하나. 


private field나 method를 가진 클래스를 상속받으면


private으로 적힌 것들은 자신의 것처럼 직접적으로 이용할 수 없다.


왜냐하면, 자기 자신 이외에는 아무도 접근할 수 없게 명시하였기 때문이다.





#default


자바(Java)에서 프로젝트(Java Project)를 먼저 생성하게 되면, src 폴더가 생성되는데,


개발자는 주로 여기에 패키지(Package)를 만들어, 자바(Java)의 클래스파일들을 효율적으로 관리한다.




default로 선언되게 되면, 같은 Package내에 있는 모든 곳에서 접근할 수 있게 된다.


필드나 메소드를 만들때, 앞에 접근 지정자를 적지 않으면, 


기본적으로 default로 인식한다.





#protected


protected는 주로 상속관계를 사용할 때 자주 볼 수 있는데,


Package의 동일유무와 상관없이 protected가 선언된 클래스를 상속받은 모든 클래스들은 


상속받은 클래스 내부의 protected타입의 모든 것을 자신의 것처럼 이용할 수 있다.





#public 


우리가 클래스에서 가장 많이 볼 수 있는 접근 지정자로,


클래스 내부의 public 으로 선언된 모든 것을 제한없이 외부의 어떤 곳이든지 이용할 수 있다.


Package동일유무, 상속유무와 상관없이 어떤 클래스라도 사용이 가능하며,


대부분의 클래스의 메소드들은 클래스내부의 필드를 


간접적으로 접근하여 이용할 수 있도록 하기 때문에, public으로 선언되어 있다.

'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
final  (0) 2018.01.19
cmd로 클래스 실행  (0) 2018.01.19
class간의 관계  (0) 2018.01.18
Class의 기본구조  (0) 2018.01.18

 자바(JAVA)는 모든 클래스들이 서로 관계를 맺고 있다.


이런 관계는 Has ~a관계와 Is ~a 관계로 크게 2개로 구분할 수 있다.





#has ~a관계


has ~a관계는 '~는 ~을 가지고 있다'라는 것을 의미한다.




노트북을 예시로 들어서 설명하자면, 


내가 사용하고 있는 노트북에는 여러기능들이 존재한다.


노트북음향을 조절하는 기능, 노트북화면의 밝기를 조정하는 기능들이 존재하는데,


내가 음향을 조절하는 기능을 이용하지 않는다고 가정해보자.


그럼 내 입장에서는 노트북에 굳이 음향을 조절하는 기능을 넣을 필요가 없는 것이다.


나와 같은 사람들이 많이 존재한다면, 


노트북 만드는 회사에서는 음향조절기능을 뺀 노트북과 음향조절기능이 있는 노트북을 둘다 만들어야 할까?


아니면 음향조절기능이 있는 노트북만 만들어야 할까?


정답은 후자, 음향조절기능이 있는 노트북만 만들어야 한다는 것이다.


왜냐하면, 음향조절기능을 가진 노트북은 


음향조절이 필요치 않은 사람과 음향조절이 필요한 사람 모두를 만족시키기 때문이다.


필요하지 않은 사람이 있다고 해서 그 기능을 뺀 제품을 만들 필요는 없다.


필요한 사람은 사용하면 되고, 필요하지 않은 사람은 사용하지 않으면 된다.


즉, 노트북을 만드는 회사는 모두에게 보편적으로 이용가능한 노트북을 생산해야 한다는 것이다.




다시 has ~a관계로 돌아와서 이야기 하자면, 


has ~a는 한 클래스 내부에서 외부에 정의된 클래스를 이용하는 관계이다.


외부에서 가져오는 클래스는 앞에서 설명했던 노트북과 같이 


어느 누가 가져와서 사용하든 보편적이여야 하며, 독립적으로 이용가능하여야 한다.


이러한 클래스를 Data Class라고 한다.


데이터 클래스(Data Class)는 말 그대로 데이터들만 담겨 있는 클래스로서,


클래스 내부에는 데이터와 외부에서 데이터를 접근할 수 있는 메소드들이 존재한다.




외부에서 클래스를 가져와 데이터의 입출력만 한다면 그것은 데이터 클래스이나,


클래스 내부의 데이터를 가지고 연산을 하고, 값을 처리하거나 출력하는 기능을 하게 된다면,


이는 데이터 클래스가 아닌 데이터들을 관리하는 데이터 관리 클래스가 된다.




has ~a관계는 데이터클래스와 데이터관리클래스로 나타낼 수 있다. 


<사용예시>








#Is ~a관계


Is ~a관계는 '~는 ~이다'라는 것을 의미하며, JAVA에서 상속이라고도 불린다.


상속이란, 한 클래스가 가진 모든 것을 다른 클래스에 물려주는 것이다. 


상속을 하는 클래스를 우리는 부모클래스, Super Class라고 부르며, 


상속을 받은 클래스를 자식클래스, Sub Class라고 부른다. 


Java에서는 모든 클래스들이 상속구조를 이루고 있기 때문에, 


맨 위로 올라가게 되면 모든 클래스의 최종 부모클래스가 존재하는데,


이를 최상위클래스라고 한다. 





상속을 이용할 경우, 가장 중요한 것은 Class간의 연관성이 존재해야 한다는 것이다.


pen이라는 클래스를 생성하고 water이라는 클래스를 생성했다고 가정해보자.


pen클래스와 water클래스 관계내에는 연관성이 존재하지 않는다. 


그렇기 때문에, 개발자가 pen클래스에서 사용하는 함수(메소드)를 이용하기 위해


water클래스에 pen클래스를 상속할 경우, 이는 Is ~a관계에 어긋나게 된다.


water이 pen일 수는 없다.




상속은 클래스명 옆에 extends 클래스명을 적게 되면 적혀진 클래스를 상속받게 되는데,


우리가 처음 클래스를 만들 경우에는 extends가 존재하지 않는다.


그러면 상속을 받지 않는 것일까?



정답은 아니다. 


모든 클래스는 생성과 동시에, 최상위 클래스인 Object클래스를 상속받게 된다.



코드상에서 상속을 받지 않는 것처럼 보이지만, 


사실은 이미 클래스가 만들어질때 부터 상속은 이루어진 것이다. 




[상속의 특징]


상속은 최상위 클래스에서 최하위자식클래스로 갈수록 추상화가 이루어진다.


추상화란 추상적인 개념을 구체화하는 행위를 의미한다. 


예시를 들어 설명을 하자면, 동물을 생각하면 무엇이 떠오르른가?


토끼, 인간, 양서류 등의 몇몇 단어들이 떠오르게 될 것이다.


이러한 단어들은 모두 동물이란 단어과 연관성이 있으며,


동물들을 구체적으로 설명하였다고 할 수 있다.


또한 토끼, 인간과 같은 단어들 속에서 동물만이 가질 수 있는 공통점들을 찾을 수 있을 것이다.


숨을 쉬고, 귀가 있다는 공통점들은 토끼와 인간 뿐만 아니라,


모든 동물들에게 해당될 수 있는 공통점이다.


이러한 공통점을 우리는 토끼를 명시할때나, 혹은 인간을 명시할때,


일일히 명시할 필요가 있을까?



공통점들만을 모아 부모클래스로 구성하여 상속관계를 맺는다면,


자식클래스는 이러한 공통점들을 가질 수 있으며, 자신만의 다른 점을 추가할 수 있다. 


즉, 다르게 말하면, 자식클래스 입장에서는 부모클래스의 공통점만으로 


자신을 완벽하게 표현 할 수 없다고 생각할 수 있다는 의미이다.


그렇기 때문에, 부모클래스의 공통점을 받고, 자신만의 특징을 추가하는 자식 클래스는 


부모클래스가 자신을 나타내는 것 보다 , 자신을 보다 추상화하고 있다고 할 수 있다.



'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
final  (0) 2018.01.19
cmd로 클래스 실행  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
Class의 기본구조  (0) 2018.01.18

Java는  class단위로 코드를 구성한다.


class의 기본적인 구조는 크게 3가지로 구분할 수 있다.




#field


[기본형태 : 접근지정자 데이터타입(dataType) 변수명]


필드라고 불리기도 하고, 변수라고 불리기도 하는 이것은, 


한 class내에서 모든 메소드(method)이 접근가능한 변수를 의미한다.




이러한 필드는 인스턴스(instance) 필드와 스테틱(static)필드 두가지로 구분되는데,


인스턴스 필드(instance field)는 말 그대로 객체, 즉 클래스(class)를 생성했을 시에 같이 생성되는 필드이다.


스테틱 필드(static field)은 객체가 생성되기 이전에 객체보다 먼저 생성되는 필드로서, 


객체의 생성유무와 연관성이 없기 때문에, 어떤 클래스에서도 공통적으로 사용할 수 있다.






#method


[기본형태 : 접근지정자 리턴타입(return type) 함수명(메소드명) (매개변수)]


메소드(method)는 기능을 가진 함수라고 할 수 있다.




개발자가 클래스외부에서 클래스를 이용할 경우, 


정보보호와 은닉을 위해 클래스의 직접적인 필드을 건드리지 못한다.


그러나 메소드를 이용하면 메소드(함수)는 클래스 내부에 위치해 있기 때문에, 


같은 클래스 내부의 필드를 이용하거나, 값에 대한 수정이 가능하다.


클래스의 외부와 클래스 내부의 필드를 연결해주는 다리의 역활을 한다고 말할 수 있다.




메소드(method)도 필드와 마찬가지로, 


인스턴스 메소드(instance method)와 스테틱 메소드(static method)로 구분할 수 있다.


설명은 필드와 동일하다.


여기서 하나, 인스턴스 메소드와 스테틱 메소드의 차이를 말하자면,


인스턴스메소드는 this가 이용가능하나, 스테틱메소드는 this가 이용불가능하다.


this에 대한 설명은 블로그내의 'this와 super의 이용'에서 자세히 설명하고 있다.






#constructor


생성자는 말 그대로 생성을 하는 역활을 하는데, 정확하게 이야기를 하자면,


객체를 등록하는 역활을 한다고 할 수 있다.


객체를 만들기 위해서 우리는 main에서 아래와 같은 코딩을 하는데,



여기서 new뒤에 오는 No4() 이부분이 생성자를 호출하는 부분이다.


위와 같은 코드를 실행하면 main은 No4의 생성자로 이동하여,


생성자는 객체를 등록하게 되고, main은 이 객체를 인식하여 이용할 수 있게 된다. 




생성자는 주로 개발자가 클래스(class)내의 필드(field)를 초기화해줄 때 이용된다.


생성자의 생김새는 아래와 같다.




생성자의 가장 큰 특징중 하나는 리턴타입(return type)이 없다는 것과 시작글자가 대문자라는 것이다.


객체를 등록하는 역활을 하기 때문에, 반환값이 필요하지않으며,


생성자의 이름은 클래스의 이름과 동일해야 하기 때문에,


클래스의 시작글자가 대문자인 것처럼, 생성자의 시작글자 또한 대문자이다.




그런데, 우리가 객체를 만들 때 따로 생성자를 만들지 않고 객체를 등록하여 이용한다.


이렇게 할 수 있는 이유는 바로 객체 내에는 생성자가 이미 존재하기 때문이다.


눈에 보이지 않지만, 객체등록을 위해 생성되있는 생성자를 "default constructor"라고 한다.


이 디폴드 생성자(default constructor)는 개발자가 생성자를 하나도 명시하지 않았을 경우에 존재한다.


만약 개발자가 하나라도 명시할 경우에는, default constructor는 존재하지 않기 때문에,


개발자가 따로 명시를 해줘야 한다.




생성자는 또한 오버로딩(overloading)이 가능한다.


 + [오버로딩(overloading)]


   : 오버로딩이란, 개발자가 동일한 기능을 하는 메소드들을 만들때, 


    같은 메소드(method)명을 가지고, 각각 다른 매개변수를 지정하고 싶을 때 사용하는 기법이다.


    JAVA는 함수명(메소드명)이 동일해도 매개변수의 타입과, 매개변수의 갯수가 다르다면,


    상황에 맞추어 알맞은 메소드들을 찾아간다.


 < 오버로딩(overloading) 사용예시>







'JAVA' 카테고리의 다른 글

IntelliJ 설치  (0) 2018.10.26
final  (0) 2018.01.19
cmd로 클래스 실행  (0) 2018.01.19
접근 지정자  (0) 2018.01.19
class간의 관계  (0) 2018.01.18

+ Recent posts