개발/JAVA

    [Java] 필드 주입시 생성자에 this 꼭 써야할까?

    나는 아래와 같이 class 에서 생성자 코드를 작성시 항상 생각없이 this를 썼다. class Board { String name; String content; public Board(String name, String content) { this.name = name; this.content = content; } } 한번도 this를 꼭 써야하나라는 고민은 하지 않았기 때문이다. 대부분 클래스의 생성자로 필드 주입시 위와 같이 this를 사용한다. 왜냐하면 필드의 변수명과 생성자로 주입받는 파라미터의 변수명이 같기 때문이다. class Board { String name; String content; public Board(String name, String content) { name = nam..

    [Java] @Override 꼭 적어야 하나?

    정해진 인터페이스를 구현하는 경우 인터페이스가 가진 메소드들은 꼭 @Override 를 적어 재정의를 해줘야 한다. 이처럼 Override는 재정의를 위해 덮어쓴다는 표현이다. 그렇다면 구현이 아닌 확장의 경우도 꼭 적어야 할까라는 생각이 든다. extends(확장)의 경우 부모가 가진 메소드를 굳이 재정의 해주지 않아도 사용할 수 있다. 하지만 부모가 가진 메소드를 내 입맛대로 바꾸면서 재정의를 하려고 한다면 @Override를 적어줘야 한다. 아래와 같이 똑같은 코드인데 @Override가 있고 없음에 따라 결과가 달라질 수 있다. class Hi { public void say() { System.out.println("안녕"); } } class Bye extends Hi { public void..

    [Java] 인터페이스가 가진 객체지향의 특징

    인터페이스는 객체지향의 특징 중 추상화, 다형성, 상속성의 특징을 가지고 있다. 1. 추상화 인터페이스는 미리 기능들을 정의하여 다른 객체에서 구현을 통해 정의된 기능들을 가져다 쓴다. 사람과 원숭이가 가지는 공통적인 숨쉬기, 걷기 등과 같은 공통적인 기능들을 인터페이스에 미리 정의하여 쓸 수 있기때문에 추상화의 특징을 가진다. 2. 다형성 하나의 인터페이스로 여러 자식들을 가질 수 있다는 점에서 다형성의 특징도 가지고 있다. 3. 상속성 객체지향의 특징 중 상속성같은 경우에는 속성과 기능을 부모로부터 물려받을 수 있다. 인터페이스를 구현한 구현체도 인터페이스가 가진 속성과 기능을 사용하기 때문에 결국엔 인터페이스를 물려받는것이라고 할 수 있다. 그래서 상속성까지 가지고 있는 것이다. 4. 캡슐화 인터페..

    [Java] List<T> list = new ArrayList<>();

    자바에서 변수를 선언할때 보통 아래와 같이 선언한다. Type 변수 = new Type(); 하지만 ArrayList의 경우에는 보통 List 타입으로 선언한다. List arrayList = new ArrayList(); 그 이유가 궁금해서 찾아보기 전 나는 List 클래스의 method가 ArrayList보다 더 많이 제공하고 편한가? 라는 생각을 했다. 1. List 먼저 List는 클래스가 아닌 인터페이스였다. List 인터페이스를 들어가보면 아래와 같이 인터페이스로 구현되어 있다. public interface List extends ~ 추가로 공식문서에서도 인터페이스라는 것을 확인할 수 있다. 인터페이스란 메소드를 선언만 해놓고 다른 클래스에서 인터페이스를 implement 하여 인터페이스에 ..

    [JAVA] 입력 받은 숫자가 소수인지 판단하는 문제 뜯어보기

    입력받은 숫자가 소수인지 아닌지 판별하는 문제를 통해 배운게 꽤 많아서 정리하려고 한다. 첫 번째 내가 푼 풀이이다. import java.util.Scanner; public class FindPrimeNumberRunner { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Input any number!"); boolean isPrime = true; int number = input.nextInt(); for (int i = 2; i < Math.sqrt(number); i++) { if (number % i == 0) { isPrime = false; } } Sys..

    [JAVA] java 기본개념 (+ jshell)

    1. 자바란? 자바란 흔히 객체 지향 프로그래밍(OOP) 언어라고 한다. 이는 OOP의 기본 구성 요소인 객체, 클래스 및 상속의 개념을 기반으로 하는 것이다. (1) 자바의 객체 method 및 static 값들을 공유하는 클래스의 인스턴스이다. 다시 말해, 클래스라는 템플릿으로 만든 값이다. (2) 자바의 클래스 인스턴스를 만들기 위한 템플릿이다. 클래스에서는 method나 로직을 구성하여 인스턴스들의 작동 방식을 정의할 수 있다. (3) 자바의 상속 하위 클래스에서 상위 클래스를 상속하여 코드의 중복을 줄일 수 있고 새로운 클래스를 만들 수 있다. 템플릿을 변형시켜 새로운 템플릿을 만드는 것이다. OOP에서 중요한 점은 또 있다. (1) 캡슐화 내부의 정보를 숨기면서 외부의 호출이 있을 때 정해진 ..