오늘은 Java의 ... 표현에 대해서 알아보려고한다. 이 표현을 최근에 접해보면서 알게되었는데, 생각해보면 가끔 코딩을 하다가 파라미터를 받을 때 ... 같은 표현을 본 적이 있는 것 같다. 이 표현의 이름은 ellipsis 뜻 풀이 하자면 생략이다. (가변길이 파라미터 또는 가변인자라고도 불린다) 같은 유형의 타입을 여러개 받아도 처리 할 수 있게 해주는 역할을 해준다. 이렇게 말하면 살짝 이해가 안될 수도 있을 것 같아 예제 코드를 살펴보자. public class Main{ public static void main(String[] args) { String[] name = {"GG", "_", "BB"}; print("GG_BB"); System.out.println("\n"); prin..
이번에는 좋은 객체지향 설계를 위한 5가지 원칙인 SOLID에 대해서 정리해보려고 한다. 원래는 의존성 주입하는 방식들에 대한 글을 쓰려했으나 이것을 먼저 정리하는 것이 좋을 것 같다고 생각되어 정리하게되었다. SOLID 원칙같은 경우에는 굳이 Spring이 아니더라도 좋은 객체지향 프로그램을 만들고 싶다면 지켜야 될 원칙이다. 어떤 내용인지 한 번 살펴보자. 1. SRP (Single Responsibility Principle, 단일 책임 원칙) 단일 책임 원칙이란 한 클래스는 하나의 책임만을 가져야 한다는 원칙이다. 예를 들어서 학생들을 저장하고 조회하는 기능을 만드려고 하는데, 이 클래스 내에서 프로그램의 실행까지 이루어진다면, 이는 한 클래스가 하나의 책임이 아닌 여러 책임을 가지게 되는 것..
오늘은 static import에 대해서 알아보려고 한다. 그동안 개발을 하면서 들어본 적이 없었기에 매우 편리한 기능이라고 생각되었다. 어떤 기능인지 한 번 살펴보자. public class Main{ public static void main(String[] args) { System.out.println("GG_BB"); } 쉽게 알아보기 위해서 누구나 한번 쯤은 써봤을 println을 예제로 사용하겠다. 위 코드는 그저 GG_BB라는 구문 하나를 출력하기 위한 코드이다. 이 코드에 static import를 적용시켜보겠다. import static java.lang.System.*; public class Main{ public static void main(String[] args) { out...
이번 글에선 컬렉션 프레임워크에 대해서 정리해보려고 한다. 컬렉션 프레임워크는 프로그래밍에 있어서 필수불가결한 요소라고 생각한다. 저번에 설명한 스트림도 컬렉션을 활용할 수 있는 것이고, 기본적으로 배열같은 데이터는 실무에서나, 혼자 코딩할 때나, 코딩테스트를 할 때도 거의 항상 들어가기 때문이다. 그렇기에 더 자세히 이해하고 활용할 수 있어야겠다는 생각을 하게 되었다. 그렇다면 한번 시작해보자. 일단 컬렉션에 대해 설명하기 전에 사진을 보며 종류에 대해서 살펴보자. 컬렉션 프레임워크는 인터페이스로 구현되어있다. 그 인터페이스(컬렉션)으로 구현되어있는 것들이 List, Set, Map인데 이 컬렉션 인터페이스들을 통해 구현한 것들(ArrayList, HashMap 등)을 컬렉션 클래스라고 불린다...
이번 글에서 다룰 주제는 Java SE 8버전에서 추가된 Lambda(람다) 표현식과 Stream API에 대해서다. 나는 애석하게도 Lambda 에 대한 것이나 Stream 을 배워본 적이 없어서 활용해보질 못했었다. 그렇기에 더욱 더 제대로 공부해야겠다고 생각이든다. 이번 글에서 설명할 람다 표현식과 스트림을 이용하면 많은 장점이 있다. 기존의 불필요한 코드를 줄여주고, 가독성을 높여주며 효율 면에서도 좋은 효과를 줄 수 있다. 대체 어떤 방식이길래 그러는지 정리해보겠다. 1. Lambda 표현식 람다 표현식은 식별자 없이 실행이 가능한 함수를 만들 때 쓰인다. 이 한줄을 보면 식별자가 없는데 어떻게 실행을 하지? 라는 생각이 들 수도 있다. 자바스크립트를 해봤다면 변수에 함수를 넣어서 익명함..
오늘은 자바 프로그램의 기본 구조에 대해서 정리해보려고 한다. 오늘 설명하는 내용은 기본적인 내용이기도 하지만, 면접질문에도 많이 나오고, 객체지향에 대한 중심이 담겨 있다고 생각한다. 얼핏하면 헷갈리는 것들도 정리해서 잘 기억할 수 있도록 해야겠다. 자바 프로그램의 기본 구조 우리가 자바 코딩을 하기 위해 무언가를 추가할 때, 많은 선택지가 있다. Class, Interface, Enum, Annotation 까지... Class와 Interface 까지는 들어봤어도 Enum? Annotation?? 할 수도 있을 것 같다. 하지만 그리 어렵지는 않은 개념들이니 정확히 알아두고 활용해보는 게 좋을 것이다. 1. Class 첫 번째로는 자바를 처음 배우게 되면 맞이하게 되는 클래스이다. 클래스..
Java의 기본다지기를 해보려고한다. 아무래도 기본이 조금 부족한 걸 여러모로 느껴서, 처음 시작하는 느낌으로 돌아가 Java에 대한 걸 처음 부터 시작해서 끝까지 모르는 것이 없을 정도로 하나하나 이해하면서 넘어 갈 생각이다. 오늘의 기본은 조금 고리타분하게 들릴 수도 있는 Java에 대해서이다. JAVA? 자바언어는 객체 지향적 프로그래밍 언어이다. 객체지향(Object-Oriented Programming, OOP)은 명령어들이 합쳐져 만들어진 컴퓨터 프로그램을 하나의 독립된 단위로 보는 것을 말한다. 각 객체들(각 기능들)은 메시지를 주고받고 데이터를 처리하여, 프로그램을 유연하고 용이하게 변경할 수 있게 한다. 쉽게 말하자면 개발한 요소(클래스) 하나하나가 객체가 되고 그 요소끼리 상호작..
오늘은 자바의 overriding, overloading 에 대해서 설명하려고 한다. 객체지향언어인 자바에서은 매우 중요한 개념이기도 하니 확실히 이해하면 좋을 것 같다. 1. overriding 오버라이딩은 말그대로 덮어쓰기를 뜻한다. 다른 말로 표현하자면 메소드를 다시 정의하는 것이라고 말할 수 있다. class Member{ void printCN() { System.out.println("Member"); } } class Member_sub extends Member { void printCN() { System.out.println("Member_sub"); } } 위와 같이 같은 이름의 메소드를 다시 정의하는걸 overriding 이라고 한다. 재정의를 했을 때는 @Override를 통해..
오늘은 접근제어자에 대해서 정리해보려고 한다. 옛날에 코딩할 때는 중요성을 못 느끼고 무분별하게 사용만을 했는데, 접근제어자를 적절히 사용하면 위험요소들을 줄일 수 있다. 자세한 예를 들어 이해와 기억에 도움이 되도록 작성해 보려고한다. 접근제어자에는 public, protected, default, private 가 존재한다. 일단 아래와 같은 test 패키지에 변수들이 있다고 가정하겠다. package test; public class Am_Member { public String pub_name = "pub_GG_BB"; protected String pro_name = "pro_GG_BB"; private String pri_name = "pri_GG_BB"; String name = "d..
오늘은 Optional에 대해서 알아보려고 한다. 그동안 개발을 해보면서 Optional이라는 걸 본 적이 없었기에, 처음 보는 만큼 자세히 이해해야겠다. Optional 이란 개발을 하면서 흔히 볼 수 있는 NullPointerException을 방지 할 수 있도록 도와주는 클래스이다. null 값이 들어올 수 있는 값을 감싸는 클래스로써, 참조하더라도 오류가 나지 않도록 도와주는 역할을 한다. 어떻게 사용이 되는지 보자면 // Member Class private final name = "GG_BB"; public void getName() { return name; } public void setName(String name) { this.name = name; } //////////////..
오늘은 클래스, 객체, 인스턴스에 대해서 설명해보려고한다. 어떤 느낌으로 사용되는지는 대충 알지만 남에게는 설명하지 못할 것 같아서 정리해보게 되었다. 밑에 코드를 보면서 이해하면 더 좋을 거 같아 넣어보았다. public class Member() { String name = "GG_BB"; public static void Mem_print() { System.out.println(""); } } 1) 클래스 (Class) 변수와 메서드의 집합이며, 객체를 만들기 위한 설계도라고 생각하면 될 것 같다. 2) 객체 (Object) 소프트웨어에 구현할 대상을 뜻한다. 좀 더 쉽게 말하자면 만들고자하는 기능이라고 생각하면 될 것 같다. 클래스의 인스턴스라고도 부른다. 3) 인스턴스 (Instan..
이번엔 static 변수에 대해 알아보려고 한다. 아예 몰랐던 지식은 아니지만 정확히는 어떤 역할을 하는지 알지 못하는 거 같아서 정리하게 됬다. 대충 메소드나 변수를 만들 때 쓰이고 메모리는 고정되지만 값만 바뀌게 할 수 있는 키워드라 생각하고 있었다. 하지만 정확히 설명하자면 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수를 static 변수라고 말한다. 이해를 돕기위한 예제를 가져와보자면 public class Member { private String name = "BB_GG"; } 다음과 같은 클래스가 있을 때, 이 클래스를 통해 다른 클래스에서 n개의 Member를 생성하면 "BB_GG"라는 값을 가지는 메모리가 n개가 생겨버린다, 이는 메모리 효율에 매우 좋지않은..