프로그래밍/자바(Java) 12

[ 자바 / JAVA ] 출력 format(printf)

Java에서 출력할 때 System.out.printf() 메소드를 사용하여 특정 형식의 문자열을 출력할 수 있습니다. C언어에서의 printf() 함수를 사용하는 것과 사용 법은 비슷합니다. [ printf() ] public PrintWriter printf(String format, Object... args) System.out.printf("출력 format", 출력할 내용); format 설명 %s String 형식으로 출력 %d 정수 형식으로 출력 %n 줄바꿈 %f float 형식으로 출력 %t date, time 형식으로 출력 %o 8진수 정수의 형식으로 출력 %x 16진수 정수의 형식으로 출력 %b boolean 형식으로 출력 %e 지수 표현식의 형식으로 출력 [ 문자열 출력 예시 ] %..

[ 자바 / JAVA ] 함수형 프로그래밍과 람다식(Lambda Expression)

자바에서는 기능을 수행하기 위해 객체를 생성하고, 객체 내부에 멤버 변수와 메소드를 선언하여 사용하는 객체 지향 프로그래밍 방식입니다. 그러나 Java SE 8 부터는 함수형 프로그래밍 방식을 지원하게 되었습니다. 자바에서 제공하는 함수형 프로그래밍 방식을 "람다식(Lambda Expression)"이라고 합니다. 자바에서는 익숙하지 않은 개념이므로 하나씩 알아보도록 하겠습니다. [함수형 프로그래밍] 함수형 프로그래밍은 영어로 Functional Programming, 줄여서는 FP 라고 합니다. 함수형 프로그래밍은 순수 함수(매개변수만 사용하여 만드는 함수)를 사용하여 구현하고 호출하는 방식입니다. 이러한 방식은 함수 내부에서 외부 변수를 사용하지 않아서 side effect를 주지 않도록 구현하는 방..

[ 자바 / JAVA ] Wrapper Class(Wrapper 클래스)

"감싸다, 포장지"같은 뜻을 가진 wrapper라는 이름처럼 Wrapper 클래스는 "기본 자료형의 데이터를 감싸는 클래스" 입니다. 여기서 말하는 기본 자료형이랑 int, double, bool 등입니다. 그러면 기존에 있는 int, double 등을 사용하면 되는데 왜 Wrapper 클래스를 사용해야 될까요? 사용하는 목적과 특징을 살펴보도록 하겠습니다. [Wrapper 클래스를 사용해야하는 이유?] 사용 용도로는 객체로 저장해야 하는 경우나 매개변수로 객체가 요구되는 경우 객체 간의 비교가 필요한 경우 먼저 다음과 같은 메소드가 있다고 생각해 봅시다. public static void printData(Object obj){ System.out.println(obj); } 이 메소드를 이용하여 정수..

[ 자바 / JAVA ] 추상 클래스와 인터페이스의 차이

추상클래스(abstract class)와 인터페이스(interface)의 공통점과 차이점에 대하여 정리해보았습니다. [공통점] 인터페이스(Interface)와 추상클래스(abstract class)는 넓게 보면 하위 클래스에서 상속(implements)을 받거나 구현(implements)을 통해서 추상 메소드(abstract method)를 구현하는 것입니다. 또한 인터페이스와 추상클래스 둘다 인스턴스를 선언을 하지 못합니다. 하지만 추상 메소드를 구현한다는 공통점 이외에는 목적이 완전히 다릅니다. 하나씩 살펴보도록 하겠습니다. [차이점] [abstract class] 기본적으로 추상클래스는 "클래스" 입니다. 추상 메소드 및 일반 메소드와 멤버 변수를 모두 가지고 있습니다. 하위 클래스에서 상속을 받아..

[ 자바 / JAVA ] 인터페이스(interface)

[인터페이스란?] 클래스나 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 합니다. 메소드의 구현부가 없기 때문에 인터페이스 내에 존재하는 모든 멤버 변수는 public static final입니다. 인터페이스 내에 존재하는 메소드는 무조건 public abstract로 선언됩니다. 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미입니다. 하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있습니다. (다형성 구현) 예) JDBC 드라이버 public interface 인터페이스 이름{ public static final float pi = 3.14F; public abs..

[ 자바/ JAVA ] 추상클래스(abstract class)

[추상 클래스란? ] 완전하지 않은 클래스를 의미합니다. 구현 코드 없이 매소드의 선언만 있는 추상 매소드(abstract method)를 포함한 클래스입니다. 새로운 클래스를 생성할 때의 공유의 목적을 위해서 추상클래스를 사용합니다. abstract class Student{ public void showData(){ System.out.println("이름 : "+name); } // 추상메소드 public abstract void showInfo(); } [추상 클래스의 특징 및 목적] 추상 클래스는 인스턴스의 생성이 불가능합니다. 추상 클래스는 추상 메소드 뿐만 아니라 일반 매소드도 포함이 가능합니다. 추상 클래스를 상속 받은 일반 하위 클래스는 추상 클래스의 추상매서드를 오버라이딩 했으므로 구현..

[ 자바 / JAVA ] String, StringBuilder, StringBuffer 클래스

세가지 클래스 모두 자바에서 문자열의 표현을 위한 클래스이지만 차이가 있습니다. 하나씩 각 클래스마다의 특징과 차이점을 정리해보겠습니다. [String 클래스] 다음과 같이 String을 생성하는 두 가지 방식이 있습니다. 1. new 연산자를 이용하는 방식 2. 리터럴을 이용하는 방식 //(1) new 연산자 String str1 = new String("abcd"); //(2) 리터럴 String str2 = "abcd"; 두가지 방식의 공통점은 한번 생성된 String은 불변입니다.(immutable) String을 연결하면 기존의 String에 연결되는 것이 아닌, 새로운 문자열이 생성됩니다(메모리 낭비) 두 가지 방식의 차이는 new 연산자로 생성하면 힙(Heap) 메모리에 인스턴스로 생성됩니다..

[ 자바 / JAVA ] 오버라이딩 vs 오버로딩

Overriding과 Overloading은 객체 지향언어에서 다형성을 높여주는 개념입니다. 이름이 비슷해서 비슷하게 생각할 수 있지만 전혀 다른 개념입니다. [오버로딩(Overloading)] 오버로딩은 동일한 이름의 메소드를 여러개 정의하는 것입니다. 메소드의 이름과 return 타입은 동일하지만, 매개변수의 형(type)이나 개수가 다른 상황입니다. 이렇게 함으로써 다양한 상황에서 메소드가 호출 될 수 있도록합니다. 아래와 같이 함수의 이름과 리턴타입은 같지만 매개변수의 개수가 다르므로 오버로딩이 가능합니다. int sum(int n1, int n2){ int ans = n1+n2; return ans; } int sum(int n1){ int ans = n1+1 return ans; } 다음과 같..

[ 자바 / JAVA ] static 키워드(static 변수, static 메소드)

static 변수(클래스 변수) [static 변수의 정의] static 변수는 클래스가 정의만 되었을때도 사용할 수 있는 변수입니다. 클래스 변수, 정적 변수라고도 불려집니다. [static 변수의 특징] 인스턴스 생성과는 관계없이 처음 프로그램이 메모리에 로딩될 때 메모리에 할당 됩니다. 인스턴스 간에 공통으로 사용하는 변수가 필요한 경우에 사용합니다. 아래의 코드를 보면 static 변수 serialNum은 인스턴스에서 공통으로 사용하는 것을 확인 할 수있습니다. class student{ public static int serialNum = 1000; public int studentId; public String studentName; } class test{ public static void ..

[ 자바 / JAVA ] 접근제어 지시자(Access Modifier)

클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드입니다. [public] 클래스의 외부 어디서나 접근 할 수 있습니다. [private] 같은 클래스 내부에서만 접근 가능합니다.( 외부 클래스, 상속 관계의 클래스에서도 접근 불가) [default(아무 것도 없음)] 같은 패키지 내부에서만 접근 가능합니다. ( 상속 관계라도 패키지가 다르면 접근 불가) [protected] 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없습니다.