본문 바로가기

Java

Java에서 접근 제한자의 의미와 종류 접근 제한자의 의미 백엔드 개발자에게 있어 보안은 가장 중대한 이슈 중 하나이다. 소프트웨어 서버는 고객의 개인정보와 기밀 자료를 다루므로, 백엔드 개발자가 보안에 가장 많은 공을 들여야 하는 것은 당연지사다. 사회에서 간간히 발생하는 정보 유출 사태는 고객의 개인 정보나 기밀 자료가 유출되면 어떤 일이 발생하는지에 대한 좋은 예시를 보여 주었다. 고객 정보뿐만 아니라 기업의 자산인 비즈니스 로직을 노출하지 않는 것 역시 매우 중요한 일이다. 이를 위해 대부분의 소프트웨어 기업에서는 기업 용역의 핵심인 비즈니스 로직을 철저히 감추고, 외부에 소프트웨어의 기능을 공유하더라도 Open API를 통해 외부와 연결 가능한 공용 인터페이스만을 노출한다. 소프트웨어는 접근 제한자를 통해 외부에 노출되어도 무관한 일.. 더보기
Java에서 char 타입의 활용 char 타입의 개념 Java에서 char 타입은 Primitive type으로서, 0~65535의 정수값을 통해 16비트(2^16 = 65536)의 유니코드(Unicode) 문자를 표현한다. char 타입은 Object type인 Character 타입의 unboxed 형태이므로, Chararter 타입에 비해 활용처는 부족하지만 처리 속도가 빠르다. Primitive type과 Object type의 차이에 대한 설명은 이전 글에서 다뤘다(https://hellmir.tistory.com/entry/프로그래밍에서-자료형Data-type이-필요한-이유in-Java). 프로그래밍에서 자료형(Data type)이 필요한 이유(in Java) 자료형(Data type)은 데이터를 분류하는 방법이다. 자료형을.. 더보기
프로그래밍에서 자료형(Data type)이 필요한 이유(in Java) 자료형(Data type)은 데이터를 분류하는 방법이다. 자료형을 통해 해당 자료의 처리되는 데이터 종류, 메모리 할당 과정, 연산 수행 방법을 인지할 수 있다. 예를 들어, Primitive type(기본형)인 int(정수) 타입은 언뜻 보면 불필요해 보인다. double(실수) 타입이 int 타입보다 더 넓은 범위의 값을 담을 수 있기 때문이다. 하지만 동일한 수치를 가지는 데이터도 자료형마다 컴퓨터의 이해, 처리하는 방식이 다르기 때문에 서로 다른 자료형으로 구분되어야 한다. Python과 JavaScript의 경우 동적 타입 언어(Java는 정적 타입 언어)로서, 코드 실행 시 Interpreter 또는 Compiler가 타입 추론(Type Inference)을 통해 타입을 자동으로 추론하고 결정.. 더보기
배열 출력, 복제, List 또는 Set에서 변경 배열값 출력 int[] a = {1, 2, 3}; System.out.println( Arrays.toString(a) ); java.lang의 toString 메소드가 아닌 java 유틸리티 함수인 Arrays를 사용한다. 배열 복제 int[] a = {1, 2, 3}; int[] b = a.clone(); 반복문을 이용하지 않고 배열을 그대로 복제한다. List 또는 Set을 Array로 변경(Object type만 가능) String[] array = list.toArray(new String[5]); list의 길이가 5 이하라면 길이 5짜리 배열을 만든다. List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); Stri.. 더보기
collection framework의 interface(List, Set, Map)별 주요 method 정리 공식문서에서는 method에 대해 서술할 때 타입을 일일이 설명해 주기 때문에 직관적으로 외우기 불편하다. 그래서 이곳에 내가 기억하기 편한 방식으로 정리해 두려 한다. 각 구현 클래스들에 관한 것은 시간이 된다면 다음 포스팅에서 다룰 예정이다. '이것이 자바다' 교재를 통해 공부한 내용과 개인적인 이해방식을 바탕으로 작성했으므로 틀린 내용이 있을 수 있다. List와 Set은 Collection 인터페이스를 상속하는 자식 인터페이스이고, Map은 독립(POJO) 인터페이스이다. 셋 다 java.util 패키지에 속해 있으므로, 사용하려면 인터페이스를 가져오는(import) 작업이 필요하다. List List는 index 순서대로 저장하는 방식이다. 다른 index에 같은 내용의 객체를 중복 저장할 수 .. 더보기
method overriding 과정에서 @Override annotation을 사용해야 하는 이유 method overriding(메소드 재정의)은 부모 클래스에게 method를 상속받은 자식 클래스 또는 인터페이스를 구현한 구현 클래스에서, 해당 클래스에 적합하지 않거나 별개의 작업이 필요한 부모 클래스의 메소드 실행내용을 변경해 적용하는 작업이다. 이를 통해 같은 클래스를 상속받거나 구현한 클래스 간에도 다형성을 구현할 수 있다. 또한 추상 메소드(abstract method)는 실행부가 존재하지 않으므로, 반드시 재정의가 필요하다. 어제 포스팅한 객체의 네 가지 특성 중 상속성 항목의 마지막에 @Override annotation에 대해 간략하게 언급했었다. 클래스 상속 후 메소드를 재정의할 때, 자식 클래스에서는 해당 메소드의 선언부를 부모 클래스의 메소드 선언부와 동일하게 작성해야 한다. 또.. 더보기
인터페이스의 객체지향적 특징 인터페이스는 객체와 객체를 연결해 주는 매개체이다. 앞서 포스팅한 캡슐화와 추상화, 다형성, 상속성의 특징을 모두 가지고 있다. 인터페이스는 다른 객체를 사용하려는 객체에게 해당 객체에 대한 일종의 사용설명서와 같은 역할을 한다. 인터페이스에 선언된 추상 메소드는 구현 객체에 어떤 종류의 메소드가 있는지 알려 준다(추상화). 외부 객체는 인터페이스의 추상 메소드를 통해 간접적인 방법으로 해당 객체를 호출할 수 있다(캡슐화). 따라서 구현 객체는 반드시 인터페이스(와 그 부모)의 추상 메소드를 재정의해, 실행 내용이 있는 메소드를 가져야 한다(상속성과 다형성). 이는 객체 간 상호작용의 연결성 측면에서 객체지향의 목적에 크게 부합하는 특성이다. 또한 인터페이스는 외부 객체와 구현 객체를 중개하여 알맞은 구.. 더보기
객체지향의 네 가지 특성 : 캡슐화, 추상화, 다형성, 상속성 객체지향의 핵심적인 네 가지 특성인 캡슐화와 추상화, 다형성, 상속성에 대해 정리해 보았다. 1. 캡슐화 객체지향 프로그래밍에서는 구조의 노출, 객체 외부에서의 비정상적인 접근 또는 필드 값의 잘못된 변경 등의 위험성으로부터 보호하기 위해 구성멤버를 캡슐화할 수 있다. 접근 제한자를 이용해 중요한 정보를 담고 있는 필드와 직접적인 호출이 바람직하지 않은 메소드를 보호하고, 대체 수단을 통해 외부 객체와 상호작용하게 된다. 클래스 내부에서는 항상 멤버 간 자유롭게 상호작용이 가능하지만, 외부에서는 접근 제한 등급에 따라 공개된 구성요소에만 접근할 수 있다. 이 구성요소들은 외부와의 상호작용을 매개하며 잘못된 이용을 방지해 주는 역할을 담당하게 된다. public class Encapsulation { pr.. 더보기