본문 바로가기

Java18

[자바의 신] 어노테이션 어노테이션은 컴파일러에게 정보를 알려주거나, 컴파일 할때 와 설치(deployment)시의 작업을 지정하거나, 실행할때 별도의 처리가 필요할때 사용한다. 어노테이션은 클래스, 메소드, 변수 등 모든 요소에 선언할 수 있다. 자바에서 사용하기 위해 정해져 있는 어노테이션은 3개, 어노테이션을 선언하기 위한 메타 어노테이션은 4+1개가 있다. 먼저 사용하기 위해 정해진 어노테이션 3개는 다음과 같다.(JDK6 기준) @Override 해당 '메소드'가 부모 클래스에 있는 메소드를 오버라이드 했다는 것을 명시적으로 선언 만약 이 어노테이션을 쓰고 오버라이드 형식에 맞지 않게 코딩했다면 컴파일 에러 발생 @Deprecated 만들어진 클래스나 메소드가 더 이상 사용되지 않는 경우 컴파일러가 알려주는 용도 @Su.. 2020. 11. 28.
[자바의 신] 클래스 안의 클래스 자바에서는 클래스 안에 클래스를 Nested 클래스라고 부른다. 왜 클래스 안에 클래스가 있을까? 코드를 간단하게 하기 위해서 이다. 한 곳에서만 사용하는 클래스를 논리적으로 묶어서 처리할 필요가 있을때(Static Nested 클래스) 캡슐화가 필요할때, 즉 내부 구현을 감추고 싶을때(내부 클래스) 소스의 가독성과 유지보수성을 높이고 싶을때 Nested 클래스는 자바 기반의 UI를 처리할 때 사용자의 입력이나, 외부의 이벤트에 대한 처리를 하는 곳에서 많이 사용된다. Nested 클래스는 선언 방식에 따라서 두가지로 구분할 수 있고, inner 클래스는 이름이 유무에 따라서 다시 두가지로 나눌수 있다. Static Nested 클래스 inner 클래스 로컬 내부 클래스 익명 내부 클래스 Static N.. 2020. 11. 28.
[자바의 신] 예외 예외는 매우매우 중요하다. 예외를 모르면 자바를 모르는것과 같다. 예외를 생각하지 않고는 안전한 프로그램 개발이 불가능하다. 자바에서 예외는 우리가 예상한 혹은 예쌍치 못한 일이 발생하는 것을 미리 예견하고 안전장치를 하는것. try ... catch try 블록 안에 예외가 발생할 수 있는 문장을 묶어주고, catch 블록 안에 예외가 발생했을때 처리를 해준다. 반드시 모든 문장을 묶을 필요는 없고, 예외가 발생하는 부분만 묶어주면 된다. try ... catch 블록에서 예외가 발생하면 예외가 발생한 문장이후는 실행되지 않고, 바로 catch 블록으로 넘어간다. 반대로 try블록에서 예외가 발생하지 않으면, catch 블록은 실행되지 않는다. 주의할 사항 변수의 선언 try ... catch 블록도 .. 2020. 11. 28.
[자바의 신] 인터페이스와 추상클래스 인터페이스나 추상클래스는 하나의 기호다. 전원버튼의 모양을 보고 전자기기의 전원을 켜는 것과 같이 인터페이스나 추상클래스의 모양을 보면 어떻게 써야 할지 알 수 있다. 보통 설계 단계에서 인터페이스를 정의하고 개발단계에서 인터페이스를 구현한 클래스를 만든다. 중요한 것은 인터페이스를 구현한 클래스가 어떻게 되어있는지의 여부. 인터페이스나 추상 클래스의 메소드를 사용하는 사용자의 입장에서 내부 구현이 어떻게 되어 있는지는 별로 안궁금하고, 그냥 호출하고, 응답을 받으면 된다. 인터페이스와 추상클래스를 사용하는 이유 설계시 선언해 두면 개발할때 기능을 구현하는데만 집중할 수 있다. 개발자의 역량에 따른 메소드의 이름과 매개변수 선언의 격차를 줄일 수 있다. 공통적인 인터페이스와 추상클래스를 선언해 놓으면 선.. 2020. 11. 20.
[자바의 신] Object 사실 모든 자바 클래스의 부모는 java.lang.Object클래스 이다. extends 키워드가 없을때, 즉, 아무 클래스도 상속받지 않은 클래스는 모두 Object를 상속받은것이다. 그럼 extends 키워드가 붙은 클래스는 Object도 받고, 다른 클래스도 받은건가? 다중 상속은 안된다고 했던거 같은데.. 다중 상속은 안되지만, 여러 단계로 상속받을수 있다. 아래 그림을 보자. 왼쪽처럼 Child가 Parent와 Object를 동시에 상속받을수 없다. 하지만 오른쪽과 같이 Parent가 Object를 상속받고, Child가 Parent를 상속받는 형태로 상속 받는 것은 가능하다. 결국 Child도 Object의 변수와 메소드를 상속받은것 처럼 사용할 수 있다.(public, protected) 왜.. 2020. 10. 21.
[자바의 신] 상속 상속? 상속은 중요하다. 일단 자바에서 상속은 클래스를 선언할때 아래와 같이 extends 키워드를 쓴다. public class [작성할 클래스 이름] extends [상속받을 클래스 이름] 말로 풀어쓰면, "'내가 작성할 클래스(이하 B)'가 'extends 뒤에 있는 클래스(이하 A)'를 확장할꺼예요~" 정도가 되겠다. 그래서 어떻게 되는데요? 상속을 받으면 B는 A에 있는 자원들 중에서 접근제어자가 public, protected로 선언된 자원들(변수, 메소드)을 마치 자기가 가지고 있는 것 처럼 사용할 수 있다. private인 것들은 상속받은 클래스에서 사용할 수 없다. package com.molt.parent; public class A { public A(){ System.out.prin.. 2020. 10. 6.
[자바의 신] 접근제어자 4년 넘게 개발하면서 이제야 중요성을 인식하는 것중 하나가 바로 접근제어자이다. 이 접근제어자를 제대로 쓸 줄 알아야 정보은닉, 캡슐화 등 객체지향 프로그래밍의 주요 개념들을 제대로 사용할 수 있다고 생각한다. 자바의 접근제어자는 클래스, 메소드, 인스턴스 변수, 클래스 변수를 선언할때 사용한다. 접근제어자는 public, protected, package-private, private 4가지가 있다. 이중에서 protected와 private는 클래스 안에서만 쓸 수 있다. 클래스를 선언할때 쓸 수 없다. public 같은 클래스에서 접근 가능 같은 패키지에서 접근 가능 다른 패키지에서 접근 가능 상속받았을때 접근 가능 protected 같은 클래스에서 접근 가능 같은 패키지에서 접근 가능 상속받았을때.. 2020. 10. 2.
[자바의 신] 패키지 자바 개발을 하면 패키지를 참 많이 만든다. 자바에서 패키지는 그냥 폴더가 아니다. 패키지는 클래스를 분류해서 이름이 중복되지 않게 하고, 클래스의 역할을 규정해 혼동을 막는다. 패키지를 만들때 몇가지 주의사항이 있다. 패키지 이름은 java로 시작하면 안된다. 패키지 이름은 소문자로 지정해야 한다. 패키지 이름은 자바의 예약어를 사용하면 안된다. 주의사항을 기억하면서, 일단 패키지를 한번 만들어보자. javastudy폴더 아래 com 폴더를 만들고, 그 아래 molt 폴더를 만들겠다. javastudy > com > molt 폴더 아래 PackageTest.java 파일을 아래와 같이 만들자. package com.molt; public class PackageTest { public void prin.. 2020. 10. 1.
[자바의 신] 참조 자료형 - 메소드 참조 자료형의 중요한 내용중 하나인 메소드에 대해서 알아보자. 메소드 종료조건? 모든 문장이 실행되었을 때, return을 만났을 때 예외가 발생했을 때 모든 문장이 실행된것은 말 그대로 메소드의 중괄호 안에 모든 문장이 실행되었고, 더이상 실행할 문장이 없으면 메소드가 종료된다는 것이다. return은 뭘까? public class MethodTest { public static void main(String[] args) { } public int returnIntMethod() { int intValue = 100; return intValue; } public String returnStrMethod(){ String strValue = "스트링"; return strValue; } public .. 2020. 9. 27.
[자바의 신] 참조 자료형 - 생성자 자바에서 기본자료형을 제외한 모든 타입이 참조자료형이다. 참조 자료형은 객체를 초기화할때 new 키워드를 사용한다. (배열과 String은 좀 특이해서 new를 사용하지 않아도 객체를 생성, 초기화 할수 있지만, 이 두 가지를 제외한 모든 참조 자료형은 new를 사용해야한다.) 우리가 앞에서 만든 Bicycle 클래스도 참조자료형이다. 코드를 한번 보자. public class Bicycle { // 변수(상태) 시작 public String color;// 색상 public String grip;// 손잡이모양 public int speed;// 속도 public int distance;// 거리 public int weight;// 무게 // 변수(상태) 끝 public Bicycle(){ } // .. 2020. 9. 21.
[자바의 신] 변수 하나에 여러 개의 데이터를 담을 수 없을까? 지금까지 봐온 기본 자료형 8가지(boolean, byte, short, int, long, char, float, double)는 하나의 값만 넣을수 있다. 하나의 변수에 여러개의 값을 넣을 수는 없을까? 가장 일반적인 자료구조중 하나로 '배열'이 있다. 배열은 한가지 타입에 대해서 하나의 변수에 여러개의 데이터를 넣을 수 있다. 배열은 다음과 같이 쓴다. int[] intArray = new int[10]; 또는 int[] intArray; intArray = new int[10]; 위와 같이 초기화 하면 0번방 부터 9번방 까지 총 10칸짜리 int 형태의 방이 생긴다고 생각하면 된다. 명심할 것은 0번방 부터라는것! 0번 방 1번 방 2번 방 3번 방 4번 방 5번 방 6번 방 7번 방 8번 방 .. 2020. 9. 15.
[자바의 신] 연산자? 자바에는 여러가지 종류의 연산자가 있다. 기본연산자 복합 대입 연산자 단항 연산자 비교 연산자 논리 연산자 삼항 연산자 비트 연산자(추후 업데이트) instanceof(추후 업데이트) 1. 기본 연산자 기본 연산자는 boolean을 제외한 기본 자료형을 더하거나 빼는 등의 계산을 위해 사용한다. 참조 자료형은 기본적으로 연산자를 사용할 수 없지만, 예외적으로 String클래스만 + 연산이 가능하다. 대입 연산자(=) int a = 3; 왼쪽의 변수에 오른쪽의 값을 할당(대입)할때 사용. 기본 연산자(+, -, *, /, %) +, - : 양쪽의 값을 더하거나 뺀다. *, / : 양쪽의 값을 곱하거나 나눈다. % : 왼쪽의 값을 오른쪽의 값으로 나눈 나머지 구한다. public class BasicOper.. 2020. 9. 14.
[자바의 신] 자료형이 뭐죠? 우리가 변수를 생성할때 int, String, Bicycle 등등 앞에 붙이는 단어들은 어떤 의미가 있을까? 이 단어들은 해당 변수의 자료형(타입)을 나타낸다. 자바의 자료형(타입)은 크게보면 2가지가 있다. 1. 기본 자료형 2. 참조 자료형 기본자료형과 참조 자료형의 차이는 변수를 초기화 할 때 나타난다. 변수를 초기화 할때, 기본자료형은 new 키워드없이 바로 초기화가 가능하지만, 참조 자료형은 new 키워드와 생성자를 사용한다. 단, String클래스의 경우에는 참조 자료형임에도 new 키워드 없이 초기화 할 수 있다. // 기본자료형의 변수 초기화 int variable = 10; // 참조자료형의 변수 초기화 Bicycle bicycle = new Bicycle(); // 예외 String S.. 2020. 9. 10.
[자바의 신] 변수에도 이름이 있다? 솔직히 매일같이 코드를 치고, 보면서 변수에 이름이 있는줄 몰랐다.. 너무 쉽게쉽게 지나쳐서 그랬나? 자바에는 네가지 변수가 있다. 네가지 변수는 그 용도와 생명주기에 따라서 이름이 다르다. '자바의 신' 책에서 아주 이해하기 쉬운 코드가 있어서 가져왔다. public class 클래스 { int 인스턴스_변수; static int 클래스_변수; public void method(int 매개_변수) { int 지역_변수; Bicycle 지역_변수2 = new Bicycle(); } } 위 예제 하나면 각 변수들의 위치와 생김새를 한번에 이해할수 있다. 아름답다. 그럼 위 코드를 토대로 하나씩 보자. 1. 지역변수 - 메소드안에 선언된 변수 - 메소드 안에서만 유효함. 2. 매개변수 - 메소드를 호출할때 .. 2020. 9. 10.
[자바의 신] 클래스와 객체는 같은건가? 소스코드 - github.com/jeong-woon/TIL/blob/master/godofjava/Bicycle.java - github.com/jeong-woon/TIL/blob/master/godofjava/BicycleFactory.java 지난 글에서 현실세계의 사물(또는 추상적 개념)을 객체지향 프로그램에서 사용하는 객체로 만들기위해 클래스로 만드는 방법을 학습했다. 그러면, 클래스와 객체는 같은걸까? 결론적으로 클래스는 객체가 아니다. 아래 그림을 보자. 자전거 공장에서 자전거를 만들때, 자전거 설계도(A)를 보고 자전거(B)를 만들 것이다. 이 때, A가 클래스에 해당하고, B가 객체(혹은 인스턴스)에 해당한다. 결국 클래스는 객체를 만들기 위한 설계도라고 할 수 있다. 사실 클래스는 그 자.. 2020. 9. 9.
[자바의 신] 객체? 클래스? 메소드? 자바는 객체지향 프로그래밍 언어다. 너무 많이 들어본 말인데, 너무 많은 의미를 숨기고 있다는 느낌이 든다. 객체가 뭐지? - 객체는 현실에 있는 사물(자동차, 스마트폰, 책 등) 또는 추상적 개념(강의, 회원 등)들 모두 '객체(Object)'이다. 객체지향 프로그래밍? 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. - 위키백과, 객체 지향 프로그래밍 다시 말해, 자바는 프로그램을 '객체'들의 상호작용으로 본다. 그러면, 자바는 현실세계의 객체를 어떻게 프로그램으로 가져올까? 클래스? 클래스(class)는 자바의 가장 작은 단위이다. 자바는 현실세계의 객체들.. 2020. 9. 3.
[java] OracleJDK 11 설치 몇해 전부터 자바 유료화에 대한 논쟁이 있었는데, 인프런에서 백기선님 강의를 들으면서 정확히 알게된 부분이 있다. 오라클에서 만든 OracleJDK 11버전부터 상용으로 사용할 경우 유료. 자바라는 언어가 유료라는 말이 절대 아니고, 위의 조건들을 모두 만족할 경우 "JDK(Java Development Kit)"를 쓰는게 유료라는 말이다. JDK를 자세히 보면, JRE + 개발툴(javadoc, javap, javac 등등)을 포함하고, JRE는 JVM + 필수 라이브러리(rt.jar와 같은) 이다. 예를 들어서, OracleJDK11을 쓰고 있지만, 상용으로 사용하지 않으면 유료가 아니다. 반대로 JAVA로 개발 자체를 안하고, 코틀린을 쓰더라도, OracleJDK 11의 JVM을 상용으로 쓰면 유료.. 2020. 9. 3.
[자바의 신] 프로그래밍이 뭐죠? 자바의 신을 읽고 자바를 제대로 학습해보려고 마음 먹었다. 언제까지 갈까 싶지만, 열심히 해보자. 프로그래밍이 뭘까? 자바의 신에서 프로그래밍을 '아이가 아빠에게 신호를 보내 원하는 것을 얻는것' 에 비유하고 있다. 너무 공감했다. 독자님들은 아이가 있는지 모르겠다. 아들이 하나 있는데, 걸핏하면 운다. 일어나면 울고, 혼자 있다가 울고, 누워있다가 울고, 엎드려있다가 운다. 배고프다고 울고, 똥 쌋다고 울고, 아무튼 운다. 그럼 나는 생각한다. 이 신호는 뭘 원하는 걸까? 밥? 기저귀? 잠? 해석을 마치면, 울음을 멈추기 위해 움직인다. 프로그래밍도 이와 같다. 아이가 아빠에게 원하는 것을 알려주는 신호를 주면, 아빠가 그것을 해주기 위해 움직이는 것처럼. 내가 컴퓨터에게 할일을 가르치면, 컴퓨터가 그.. 2020. 9. 3.