전체 글 61

[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

[JAVA] 객체&생성자(new 키워드,빌더 패턴)

객체(Objects)란? 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별하는 것을 의 1. 객체의 주소 정보를 담을 레퍼런스 변수를 선언한다. 2. 자바에서는 new라는 키워드로 객체를 생성한다. ex) class 타입 변수명=new 생성자(); 3. 이때 new라는 키워드는 foo라는 객체에 저장될 메모리 공간을 할당해준다. 자바 JVM구조를 살펴보면 JVM(자바 가상 머신)이 new라는 키워드를 보면 new 뒤에 있는 클래스명을 보고 해당 클래스를 메모리에 올리는 구조이다. 그렇다면 new라는 키워드는 레퍼런스 변수를 선언할 때 사용하는데 우리가 흔히 사용하는 String,Integer와 같은 Reference Type은 new 라는 키워드를 사용하지 않을까? Str..

JAVA 2023.04.03

[JAVA] 클래스정의&종류

클래스란? 만약 스마트폰이라는 클래스가 있다고 가정할 때, 스마트폰안에는 cpu, ram, 카메라 등 다양한 부품들이 들어가 있는데 이를 담고 있는게 스마트폰이라는 클래스이고 그 안에 부품들을 클래스의 데이터라고 한다. 위의 코드와 같이 클래스를 정의할 수 있다. 클래스의 구성요소 자바에서 클래스는 멤버로 속성을 표현하는 필드와 기능을 표현하는 메소드를 가진다. 뿐만 아니라 클래스는 생성된 객체의 필드를 초기화해주는 메소드인 생성자를 가진다. 내부 클래스 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 내부 클래스의 장점 하나의 외부클래스가 여러 클래스와 관계를 맺는 것이 아니라 특정 클래스와 관계를 갖는다면 위의 코드와 같이 내부클래스로 선언하는 것이 좋은데 이럴 때 장점은 내부클래스와 외부클..

JAVA 2023.04.03

[JAVA] 함수형 인터페이스 & (->)람다식

우선 람다를 알아보기 전에 함수형 인터페이스에 대해서 먼저 알아야 한다. 함수형 인터페이스 함수형 인터페이스란 한 인터페이스에 단 1개의 추상메소드를 갖는 인터페이스를 의미한다. 그럼 위의 인터페이스는 함수형 인터페이스일까 아닐까? 대답은 No이다. 함수형 인터페이스 특징 1. 함수형 인터페이스는 단 1개의 추상메소드를 가져야한다. 2. 만약 2개 이상의 추상메소드를 가지면 함수형 인터페이스가 될 수 없다. 3. printName(), printAge()와 같이 몸체가 구현된 인터페이스는 갯수와 상관없이 함수형 인터페이스에는 아무런 영향이 없다. 위의 코드는 추상메소드가 하나만 존재하기 때문에 함수형 인터페이스라고 할 수 있다. 여기서 @FunctionalInterface 어노테이션이 의미하는 바가 무엇..

JAVA 2023.04.02