Java 28

[JAVA] 제네릭 < >

제네릭 주어진 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법 List list=new List(); 위의 코드는 제네릭사용의 장점을 보여주는 코드이다. 제네릭을 사용하는 경우에는 괄호 사이에 사용하고 싶은 타입을 입력하면 사용할 수 있다. List list=new List(); 위의 코드는 String 타입으로 list를 사용하겠다는 의미이다. ArrayList으로 선언하면 ArrayList타입의 list변수는 String타입으로 사용한다는 의미이다. ArrayList클래스는 List클래스를 상속받은 자식클래스이다. 제네릭 사용법 제네릭의 사용 방법은 다양한데 첫번째로 클래스 및 인터페이스 선언을 하는 경우에 제네릭을 사용하는 경우가 있다. 1. 클래스 ..

JAVA 2023.05.23

[JAVA] Enum(열거 타입)

Enum Enum클래스는 열거 타입클래스라고도 하며 주로 계절이나 달 처럼 정해진, 변하지 않는 값들을 하나로 묶어서 사용하고 싶을 때 사용하는 클래스 Enum타입의 데이터를 선언하기 위해서는 'enum'키워드를 이용하여야 한다. 위의 코드처럼 enum도 하나의 클래스이기 때문에 객체를 생성해주고 enum타입중에 원하는 타입을 선택하여 객체.열거타입으로 호출하게 되면 해당 타입의 값이 출력되게 된다. name()메소드 enum클래스 안에는 많은 메소드가 있는데 enum타입의 이름을 출력해주는 name()메소드가 있다. enum클래스인 Week의 값만큼 반복을 돌리면서 name()메소드를 사용하여 값을 출력하면 아래와 같이 Week클래스안에 있는 값들이 출력되게 된다. ordinal()메소드 ordinal..

JAVA 2023.05.17

[JAVA] Thread & Runnable & Multi Thread란?

Thread(스레드)란? 프로세스 내에서 실행되는 흐름의 단위 예를 들어 호랑이가 있다고 하였을 때 호랑이가 잠자는 행위를 하나의 스레드로 본다. 즉 일반적인 스레드는 동시 작업이 불가능하다. 예를 들어서 호랑이가 자면서 먹이를 먹을 수 없는 것 처럼 말이다. 위의 코드는 Thread_Class클래스가 Thread클래스를 상속받아서 생성하였다. Thread_Class클래스는 Thread클래스를 상속받아 run()이라는 Thread클래스의 메소드를 오버라이딩하여서 사용하였다. Thread클래스의 특징은 바로 start()메소드를 통해 스레드가 시작되는 특징이 있다. 위처럼 start()메소드를 호출하면 run()메소드가 실행되고 main스레드가 아닌 다른 스레드에서 실행되는 것을 확인할 수 있다. Runn..

JAVA 2023.05.03

[JAVA] 패키지&import & 접근 제어 지시자

패키지란? 쉽게 말해 클래스들의 모음집이다. 패키지를 통해서 클래스 구분이 가능 그렇다면 패키지를 사용하는 이유는 무엇일까? 바로 클래스의 고유성을 유지하기 위해서이다. 다시 말해, 서로 다른 용도의 2개의 클래스의 이름이 겹쳐서 충돌하는 경우를 방지하기 위하여 패키지를 이용하여 클래스의 고유성을 지키기 위해서이다. 위의 코드는 동일한 클래스명을 생성한 경우이다. 동일한 패키지에서 Tam이라는 클래스를 생성하면 위의 사진처럼 이미 존재한다고 컴파일러가 개발자에게 알려준다. 하지만 패키지를 이용하면 정상적으로 생성이 가능하다. 이것이 패키지를 사용하는 이유다. 위의 코드는 java1에 있는 Tam클래스를 java2패키지의 Tam1클래스에서 호출하는 코드이다. 여기서 바로 import라는 키워드가 사용된다...

JAVA 2023.04.26

[JAVA] Object클래스

Object클래스란? 모든 클래스의 최상위 클래스를 의미한다. 즉, 자바의 모든 클래스는 Object의 서브클래스가 된다. 그렇다면 Object를 상속하지 않아도 모든 클래스는 Object의 서브 클래스가 되는 걸까? 대답은 Yes이다. 개발자가 상속하지 않아도 컴파일러가 자동으로 java.lang.Object를 상속시킨다. 위처럼 Pra클래스는 Object클래스를 상속하지 않았지만 Object클래스의 메소드를 오버라이딩 할 수 있다. 그럼 우리가 자주 이용하는 Object클래스의 메소드에 대해서 설명하겠다. equals()메소드 equals()메소드는 boolean타입의 리턴타입을 가지고 있고, 두 객체가 동일한 객체면 true, 아니면 false를 반환한다. pra와 pra1 두 객체는 서로 다른 주..

JAVA 2023.04.25

[JAVA] final 키워드

final란? final키워드는 변수, 메소드, 클래스에 사용이 가능하다. final키워드가 붙으면 무언가를 제한한다는 의미가 있다. 변수에서의 final 변수에 final키워드를 붙이면 값을 수정할 수 없다는 것을 의미한다. 따라서 값을 수정할 수 없기 때문에 변수를 선언하고 반드시 초기화를 해주어야 한다. 위의 코드처럼 int형 변수x에 선언과 동시에 값을 2로 초기화를 하였는데 다음 라인에서 x값을 3으로 변경하려고 하면 컴파일러가 final키워드가 붙은 변수라서 값을 변경할 수 없다고 오류를 발생시킨다. 위의 코드는 객체변수에 final키워드가 붙은 경우이다. 객체변수는 변수의 값을 가리키는 것이 아니라 주소를 가리키기 때문에 내부 값이 변경되는 건 final키워드가 관여를 하지 못하지만 새로운 ..

JAVA 2023.04.23

[JAVA] 추상클래스란

추상클래스(abstract class)란? 우선 실체클래스란 객체를 생성할 수 있는 클래스를 의미하고 추상클래스는 이 실체클래스의 공통적인 부분을 따로 빼내서 형태를 만든 클래스를 의미 그럼 추상클래스도 객체를 생성할 수 있을까? 대답은 No이다. 이유는 추상클래스 안에 있는 메소드 내용이 아직 추상적이라 객체를 생성할 수 없기 때문이다. 추상클래스를 사용하는 이유 가장 우선적인 이유는 바로 유지보수와 재사용때문이다. 만약 예를들어 스마트폰이라는 클래스가 있고 S클래스와 A클래스가 있다고 가정하자. S클래스, A클래스 둘 다 스마트폰기능을 하는 공통적인 전화받기, 걸기, 인터넷 사용등 동일한 기능이 들어가 있다고 하자. 여기서 L클래스를 만드는 데 L클래스 또한 S, A클래스와 동일한 기능을 한다고 하였..

JAVA 2023.04.23

[JAVA] 상속&super&오버라이딩

상속이란? 자바에서 상속이란 부모클래스와 자식 클래스 간의 관계를 의미하는데 extend키워드를 사용하여 자식 클래스가 부모클래스의 자원을 이용할 수 있다. 뿐만 아니라 자바는 다중상속을 지원하지 않지만 extend선언가능한 횟수에는 제한이 없다. 위 코드처럼 Pra클래스는 부모 클래스가 되고, ExPra클래스는 Pra클래스를 상속받은 자식클래스가 된다. 또한 @Override어노테이션을 이용하여 부모클래스의 메소드를 사용할 수 있다. 물론 자바의 모든 최상위 클래스는 Object클래스이다. super vs this super키워드 상속관계에서 부모클래스의 필드나 메소드를 참조하기 위해서 사용되는 키워드 Pra클래스 부모클래스와 Pra의 자식클래스인 ExPra가 있는데 ExPra클래스는 부모클래스의 메소..

JAVA 2023.04.12

[JAVA] 메소드(method)란?

메소드(method)란? 어떠한 특정 작업을 수행하기 위한 명령문의 집합 접근제어자 반환형 메소드명(매개변수){ 몸체 구현부 } 메소드형태는 위와 같이 접근제어자(public,private), 반환형(void, String, 객체타입),메소드명,매개변수 인자, 구현부 로 구성되어 있다. 자바를 이용하는 개발자들은 메소드에 대해서 자세히 설명하지 않아도 다들 알거다. 그렇다면 많이들 궁금해하는 함수와 메소드의 차이는 뭘까? 함수 vs 메소드 사실 둘의 역할과 형태는 거의 비슷하다고 할 수 있다. 위 두 코드를 보면 자바에서 흔히 부르는 메소드는 독립적으로 존재하지 않고, 꼭 클래스 안에 속해 있어야한다. 반면에 함수는 굳이 main()함수에 존재하지 않고, 메소드와는 다르게 독립적으로 존재할 수 있다. 이..

JAVA 2023.04.04

[JAVA] this키워드

자바에서 "this" 키워드는 객체 자기자신을 의미한다. 멤버변수와 인자로 넘어온 변수의 이름이 동일한 경우에 주로 사용한다. 메소드 인자 활용 this 위 코드처럼 자바에서 this 키워드를 사용하면 인스턴스 변수인 name과 age를 가리키게 된다. 물론 위 코드처럼 this 키워드를 사용하지 않고 static을 이용하여서 인스턴스 변수에 접근이 가능하다. 생성자 활용 this 위 코드는 한 클래스에 여러 개의 생성자가 오버로딩 되어있는 경우, this키워드를 활용하여서 인자에 맞는 오버로딩된 생성자를 호출할 수 있다. 이렇게 name이라는 인자를 하나만 가지는 생성자에서 this키워드를 사용하여 name과 age인자 가진 생성자호출이 가능하다. 참조 반환this 위 코드는 Foo라는 클래스안에 Fo..

JAVA 2023.04.04