Programming/Java 20

[Java 객체지향 프로그래밍] 접근 제한자 (접근 제어자)

접근 제한자 ( Access Modifier ) 제한자(modifier)란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여한다. 자바에서는 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공하고 있는데, 접근 제한자를 사용하면 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있다. (* 정보 은닉 = data hiding : 사용자가 굳이 알 필요가 없는 정보를 사용자로부터 숨기는 것) 접근 제한자는 왜 중요한가 ? 규모 있는 프로젝트를 진행한다고 가정해 보자. 규모가 커지는 만큼 복잡성이 증가한다. 그런데 객체를 사용하는 사용자가 객체 내부적으로 사용하는 변수나 메소드에 접근함으로서 개발자가 의도하지 않은 오작동을 일으킨다..

Programming/Java 2021.03.01

[Java 객체지향 프로그래밍] 메모리 모델 - JVM

자바 가상 머신 Java Virtual Machine 일반 프로그램은 '운영체제'가 프로그램을 실행시킨다. 반면, JVM은 운영체제로부터 할당받은 메모리 공간을 기반으로 자바 프로그램(=클래스 파일)을 실행한다. 즉, 자바 프로그램의 클래스 파일은 운영체제에서 직접 동작하는 것이 아니라 자바 가상머신(JVM) 위에서 동작한다. 장점 단점 Java 프로그램 JVM에 의해서 실행되는 개념이기 때문에 운영체제에 관계 없이 동일한 결과를 갖는다. = 플랫폼 독립성, 이식성이 높다 실행 속도가 느려질 수 있다. 왜 JVM 구조와 메모리 개념을 알아야 할까? 메모리를 효율적으로 사용하고 보다 안정적인 프로그램을 개발하려면 메모리 구조와 작동 원리를 이해하고 적절하게 사용할 수 있어야 한다. JVM의 메모리 모델 메..

Programming/Java 2021.03.01

[Java 객체지향 프로그래밍] 생성자 (Constructor)

- 생성자 생성자란 오브젝트 생성과 함께 자동적으로 호출되는 특수한 메소드이다. 만약 개발자가 생성자를 기술하지 않는다면, 인수가 없는 생성자가 자동으로 생성된다. (=디폴트 생성자) - 디폴트 생성자 메소드와 같은 모양이지만 반환형이 없다. 클래스 이름과 동일한 이름을 가진다. class Product{ String name; // 상품 이름 int price; // 상품 가격 // 매개변수가 없는 디폴트 생성자 Product(){ name = "인형"; price = 8000; } // 매개변수가 두 개 ( String~ , int~) 인 생성자 Product(String name, int price){ this.name=name; this.price=price; } } - 매개 변수가 있는 생성자를..

Programming/Java 2021.02.22

[Java 객체지향 프로그래밍] 오버로딩(Overloading)

- 오버로딩(Overloading)의 개념 사전상 Overloading의 의미는 '과적(過積)' 을 뜻한다. 자바에서의 Overloading은 한 클래스 안에서 동일한 이름의 메소드를 여러 개 정의하는 것을 의미 하는데, 하나의 이름에 여러 기능이 가능하다고 이해해도 좋을 것 같다. 함수명이 고유해야하는 C 언어와 달리 java는 매개변수의 개수 또는 타입이 다르면, 동일한 이름을 사용해서 메소드를 정의할 수 있다. 우리가 많이 쓰는 println 메소드가 대표적인 오버로딩의 예라고 볼 수 있다. '출력' 기능을 가진 메소드들을 println이라는 이름으로 정의할 수 있다. - 오버로딩(Overloading)의 조건 메소드 이름이 동일해야 한다. 매개 변수의 개수 or 타입이 달라야 한다. 매개 변수는 ..

Programming/Java 2021.02.22

[JAVA 객체지향 프로그래밍] 패키지의 개념

- 패키지 선언이 필요한 상황 원(circle) 개발을 한다고 가정하자. 빠른 개발을 위해 team1 과 team2를 동시에 투입하여 team1에게는 원의 넓이를 구하게 했고, team 2에게는 원의 둘레를 구하도록 하였다. 그런데 개발된 결과물을 보니 문제가 발생하게 된다. 원의 넓이를 구해야 하는 team1은 Cricle 이라는 클래스명의 코드를 작성했고, 원의 둘레를 구해야 하는 team2 또한 Circle이라는 클래스를 작성한 것이다. 클래스명은 패키지 내부에서 중복되면 오류가 발생하므로 문제가 발생한다. ===> 따라서 공간적, 접근적 충돌 해결을 위한 패키지 선언의 필요 package teamproject; public class Circle{ // 원의 넓이 구하기 } public class..

Programming/Java 2021.02.21

[Java 객체지향 프로그래밍] 객체와 클래스

자바는 대표적인 객체지향 프로그래밍 언어라고 한다. 그런데 여기서의 객체란 무엇일까? - '객체(Object)' 의 정의 자바에서의 '객체' 개념을 이해하기에 앞서, 우리가 사는 세상에서의 '객체'는 우리가 표현할 수 있는 실제 세계의 모든 사물들을 뜻한다. 이는 눈에 보이고 만져지는 와 보이지 않고 만져지지 않는 개념으로 나눌 수 있다. 개념적인 객체 물리적인 객체 동물 고양이, 토끼, 호랑이, 사자... 필기구 연필, 샤프, 사인펜... 자동차 K5, SM5... - '클래스(Class)' 의 정의 클래스란 객체와 관련된 데이터와 처리 동작들의 모음을 뜻한다. 쉽게 말해 객체에 대한 '설계도' 라고 볼 수 있다. 클래스가 실체화된 것이 객체(object)라고 하며, 이를 실체화 하는 작업은 "오브젝트..

Programming/Java 2021.02.21

[Java] 자바빈(JavaBean)에서 프로퍼티(property)와 필드(field)의 차이점?

- 자바빈 (JavaBean) 이란? 자바로 작성된 클래스(class)들을 일반적으로 말한다. - 객체지향 언어인 자바에서 객체는 고유한 속성(특징)을 가지는데, 그 속성을 칭하는 단어를 프로퍼티(property)라고 한다.그리고 이 속성의 진짜 모습, 즉 '실체'를 담는 곳이 필드(field, 멤버변수)이다. - 프로퍼티는 useBean의 대상이 되는 객체의 set 메서드와 get 메서드로 jsp에서 호출할 때는 set과 get은 빼고, 나머지 메서드명을 소문자로 만들어 지칭한다. 일반적으로 접근 제어자는 public을 사용하여 접근해 사용 가능하다. 필드의 경우 useBean의 대상이 되는 클래스의 class변수/ 상수를 의미하고 일반적으로 접근제어자가 private 이기에 직접적인 접근을 할 수 없..

Programming/Java 2021.02.18

[Java] 자바의 예외(Exception) 처리

1. 기본 try-catch-finally문 //1. 실행 예외일 경우, 실행할 내용을 코딩하여 실행 후 예외 내용을 확인한다. try{ String name = null; System.out.println(name.toString()); // 에러 발생! Cannot invoke "String.toString()" because "name" is null //2. 예외 내용을 catch 매개변수로 설정한다. } catch(NullPointerException e) { // 3. 예외 발생 시, 처리할 코드를 기술한다. System.out.println("[데이터 입력값이 NULL입니다]"); System.out.println("예외 내용: " + e.getMessage()); // 4. 그 외의 예외에..

Programming/Java 2020.12.18

동일한 문자열 비교 : String 과 new String()의 차이

자바에서 문자열(String)을 선언하는 방법은 이렇다. 1) 리터럴 변수로 바로 할당 2) 생성자인 new 연산자를 통해 할당 String name1 = "Jeong" ; String name2 = new String ("Jeong") ; "Jeong" 이라는 문자는 같아 보이는데 얘네는 실제 메모리에 할당되는 영역에 차이가 있다. String name01 = "Jeong" ; String name02 = "Jeong" ; String name03 = new String ("Jeong") ; String name04 = new String ("Jeong") ; 1. new 없이 바로 문자열을 할당하면, "Jeong" 문자열은 같은 heap 영역의 메모리를 사용한다. System.out.println("..

Programming/Java 2020.12.07

[Java] 추상클래스 vs 인터페이스 차이?

컬렉션 프레임 워크를 공부하며 다시 인터페이스 개념이 등장했다. "컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map이 있다. 이 인터페이스들은 컬렉션 클래스를 사용하는 방법을 정의한 것이다. 다음 그림은 이들 인터페이스로 사용 가능한 컬렉션 클래스(구현 클래스)를 보여준다." (혼공자 556p) 나(==바보) 는 갑자기 혼란스럽다. 의식의 흐름은 이러했다. 인터페이스 마치 리모콘 같은 것... 클래스 비슷한 개념 같았는데.. 생성자가 없었지... (클래스 구성멤버는 필드, 생성자, 메소드 / 인터페이스 구성멤버는 상수 필드, 추상 메소드) 메소드는 추상 메소드로만 선언.... 구현 클래스가 필요하고... 인터페이스에서 추상 메소드로 선언되었으니까 실체 메소드 선언이 필요하고... ( pu..

Programming/Java 2020.12.04
728x90